gpt4 book ai didi

python - 为什么这个 xpath 不能使用 PhantomJS 工作?

转载 作者:行者123 更新时间:2023-12-01 03:25:46 26 4
gpt4 key购买 nike

我正在构建一个爬虫,需要从十几个不同的网站上爬取价格。

所有网站都使用JS来显示价格,所以我使用selenium来抓取所需的数据。

在开始构建抓取工具之前,我创建了一个 xpath 列表,我需要获取我在外部文件中抓取的每个 url 的价格元素。

我使用FireFox和Firebug获得了这些xpath,但是每次我尝试使用selenium(PhantomJS驱动程序)获取这些元素时,我都会收到错误:

selenium.common.exceptions.NoSuchElementException: Message: {"errorMessage":"Una
ble to find element with xpath './div'","request":{"headers":{"Accept":"applicat
ion/json","Accept-Encoding":"identity","Connection":"close","Content-Length":"89
","Content-Type":"application/json;charset=UTF-8","Host":"127.0.0.1:51048","User
-Agent":"Python-urllib/2.7"},"httpVersion":"1.1","method":"POST","post":"{\"usin
g\": \"xpath\", \"sessionId\": \"27f41b80-cf63-11e6-bbcc-13b1a315759a\", \"value
\": \"./div\"}","url":"/element","urlParsed":{"anchor":"","query":"","file":"ele
ment","directory":"/","path":"/element","relative":"/element","port":"","host":"
","password":"","user":"","userInfo":"","authority":"","protocol":"","source":"/
element","queryKey":{},"chunks":["element"]},"urlOriginal":"/session/27f41b80-cf
63-11e6-bbcc-13b1a315759a/element"}}

看来我的 xpath 是错误的,但是我使用其他插件仔细检查了它,每次我在 Firefox 上测试该 xpath 时它都是正确的。

这里有两个不同的 xpath,它们都应该可以工作,(他们使用 Firfox ,但没有使用 selenium ):

"id('regular-hero')/div[3]/div[1]/div[2]/div/div[1]/div/div/span"

"/html/body/div[2]/div[3]/div[1]/div[2]/div/div[2]/div/div/span/text()[1]"

这是目标页面html代码Here

这是使用 selenium 获取元素的代码:

self.browser = wd.PhantomJS()
for n in xrange(len(self.url_list)):
url = self.url_list[n]
provider = self.provider_list[n]
self.browser.get(url)
for plan in provider:
for hosting_plan in provider[plan]:
xpath = hosting_plan.values()[0] # Get the xpath of a plan
price_elem = self.browser.find_element_by_xpath("//*")
print price_elem

self.browser.close()

所有循环都用于遍历保存 xpath 列表的 JSON 外部文件。

出了什么问题?我应该尝试什么? lxml 可以帮助我吗(考虑到 HTML 代码有时会被破坏)?

最佳答案

根据提供的链接,您可以将所需元素与以下XPath匹配:

//span[@class="term-price"]

如果您的元素是使用 JavaScript 生成的,则需要等待一段时间才能出现元素:

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

element = WebDriverWait(driver,10).until(EC.presence_of_element_located((By.XPATH, "//span[@class='term-price']")))

关于python - 为什么这个 xpath 不能使用 PhantomJS 工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41409093/

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