Python Selenium查找元素XPath不起作用

时间:2018-10-04 16:41:29

标签: python selenium

我尝试在网页上找到推荐元素(时间分钟)。我的代码之前仅适用于简单文本。现在,我使用 Ctrl + Shift + I 并指出我的元素和“复制Xpath”

此外,我有Chrome扩展程序“ XPath helper” ,并尝试使用它来完成。 XPath比下面的代码中的更长。而且它也不起作用。

  

错误:NoSuchElementException:消息:没有这样的元素:无法找到元素:{“ method”:“ xpath”,“ selector”:“ // * [@ id ....

而且,我还尝试使用按类,按标签,按 CSS 选择器使用find。它仅按标签工作,而在不同页面上不完美。

我什至没有说过打印它,有时find_element(By.XPATH,'//*[...).text有用,有时没有。

我不明白,为什么它在一页上而不是第二页上工作。我想稍后在Flash中使用 XPath 的find元素。

更新现在,我重试代码,它可以正常工作!但仍然无法在下一个网页上工作。为什么它是如此多变? XPath更改,页面重新加载时还是什么?在Chrome浏览器中打开的从Flash获取文本(刷新)信息的最简单方法是什么?

import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
options = webdriver.ChromeOptions()
options.add_argument('headless')
driver = webdriver.Chrome(r"C:\Users\vishniakov\Desktop\python bj\driver\chromedriver.exe",chrome_options=options)
driver.get("https://www.betfair.com/sport/football/event?eventId=28935432")
print(driver.title)
elem =driver.find_element(By.XPATH,'//*[@id="yui_3_5_0_1_1538670363144_2571"]').text
print(elem)

2 个答案:

答案 0 :(得分:0)

这将与假设您希望该页面的数据不包含任何特定元素一起使用:

import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
options = webdriver.ChromeOptions()
options.add_argument('headless')
driver = webdriver.Chrome(chrome_options=options)
driver.get("https://www.betfair.com/sport/football/event?eventId=28935730")
print(driver.title)
elem =driver.find_element(By.CSS_SELECTOR,'.scroller.context-event').text
print(elem)

答案 1 :(得分:0)

假设您确实需要特殊数据,则可以使用contains() Xpath方法...您可以阅读有关here的信息

针对您的情况:

import selenium
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
options = webdriver.ChromeOptions()
options.add_argument('headless')
driver = webdriver.Chrome(r"C:\Users\vishniakov\Desktop\python bj\driver\chromedriver.exe",chrome_options=options)
driver.get("https://www.betfair.com/sport/football/event?eventId=28935432")
print(driver.title)
elements =driver.find_elements(By.XPATH,'//*[contains(@id, "yui_3_5_0_1_")]')
print([i.text for i in elements])

如果我的示例不起作用,您可以尝试使用contains()。您必须找出id的哪一部分发生了变化,并排除ID的那一部分。

希望这对您有帮助!