gpt4 book ai didi

python - Selenium 通过 xpath 查找所有元素

转载 作者:行者123 更新时间:2023-11-28 18:36:27 24 4
gpt4 key购买 nike

我用 selenium 废弃了一个滚动的网站并执行了下面的代码

import requests
from bs4 import BeautifulSoup
import csv
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
import unittest
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
import time
import unittest
import re

output_file = open("Kijubi.csv", "w", newline='')

class Crawling(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Firefox()
self.driver.set_window_size(1024, 768)
self.base_url = "http://www.viatorcom.de/"
self.accept_next_alert = True

def test_sel(self):
driver = self.driver
delay = 3
driver.get(self.base_url + "de/7132/Seoul/d973-allthingstodo")
for i in range(1,1):
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(2)
html_source = driver.page_source
data = html_source.encode("utf-8")

我的下一步是从网站抓取特定信息,例如价格。

因此,我添加了以下代码:

 all_spans = driver.find_elements_by_xpath("/html/body/div[5]/div/div[3]/div[2]/div[2]/div[1]/div[1]/div")
print(all_spans)
for price in all_spans:
Header = driver.find_elements_by_xpath("/html/body/div[5]/div/div[3]/div[2]/div[2]/div[1]/div[1]/div/div[2]/div[2]/span[2]")
for span in Header:
print(span.text)

但我只得到一个价格而不是所有价格。您能否就我可以改进我的代码的哪些方面向我提供反馈?谢谢:)

编辑

多亏了你们,我才让它运行起来。这是附加代码:

    elements = driver.find_elements_by_xpath("//div[@id='productList']/div/div")

innerElements = 15

outerElements = len(elements)/innerElements

print(innerElements, "\t", outerElements, "\t", len(elements))

for j in range(1, int(outerElements)):

for i in range(1, int(innerElements)):


headline = driver.find_element_by_xpath("//div[@id='productList']/div["+str(j)+"]/div["+str(i)+"]/div/div[2]/h2/a").text

price = driver.find_element_by_xpath("//div[@id='productList']/div["+str(j)+"]/div["+str(i)+"]/div/div[2]/div[2]/span[2]").text
deeplink = driver.find_element_by_xpath("//div[@id='productList']/div["+str(j)+"]/div["+str(i)+"]/div/div[2]/h2/a").get_attribute("href")

print("Header: " + headline + " | " + "Price: " + price + " | " + "Deeplink: " + deeplink)

现在我的最后一个问题是我仍然没有得到最后 20 个价格,这些价格有英文描述。我只取回有德语描述的价格。对于英文的,尽管它们共享相同的 html 结构,但它们不会被获取。

例如英文项目的html结构

     headline =   driver.find_element_by_xpath("//div[@id='productList']/div[6]/div[1]/div/div[2]/h2/a")

你们知道我要修改什么吗?感谢任何反馈:)

最佳答案

要获取该页面上的所有价格,您应该使用这样的 XPATH:

Header = driver.find_elements_by_xpath("//span[contains(concat(' ', normalize-space(@class), ' '), 'price-amount')]")

这意味着:找到所有 class=price-amount 的 span 元素,为什么这么复杂 - see here

但更简单的是通过 CSS 定位器找到相同的元素:

.price-amount

关于python - Selenium 通过 xpath 查找所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32053746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com