提问人:janosch1931 提问时间:8/10/2023 最后编辑:undetected Seleniumjanosch1931 更新时间:8/10/2023 访问量:45
使用 Xpath 使用 Selenium 进行网络抓取
Webscraping with Selenium using Xpath
问:
我正在寻找一些关于 https://tnnslive.com/ 的数字
我在 tnnslive.com 上寻找的数字:
如果我在 Chrome 中复制 xpath,我会得到:
//*[@id="root"]/div/div/div/div/div/div/div/div[2]/div[2]/div/div/div/div/div[2]/div[2]/div/div[1]/div/div[1]/div/div/div/div/div[3]/div/div/div/div[7]/div/div[2]
如果我运行以下代码:
from selenium import webdriver
# Start a new Chrome browser session
driver = webdriver.Chrome(executable_path="PATH_TO_CHROMEDRIVER")
# Navigate to the desired URL
driver.get('https://tnnslive.com/match/VDDGj17PodORnq62YwQk')
# Find the element by its XPath and print its text
element = driver.find_element("xpath", '//*[@id="root"]/div/div/div/div/div/div/div/div[2]/div[2]/div/div/div/div/div[2]/div[2]/div/div[1]/div/div[1]/div/div/div/div/div[3]/div/div/div/div[7]/div/div[2]')
# Close the browser
driver.quit()
发生错误:
NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="root"]/div/div/div/div/div/div/div/div[2]/div[2]/div/div/div/div/div[2]/div[2]/div/div[1]/div/div[1]/div/div/div/div/div[3]/div/div/div/div[7]/div/div[2]"}
(Session info: chrome=115.0.5790.171)
为什么?我该如何解决这个问题?
答:
0赞
undetected Selenium
8/10/2023
#1
要打印与网站内第一位玩家的 1st Serve Points Won 相关的文本,您需要诱导 WebDriverWait visibility_of_element_located(),并且您可以使用以下任一定位器策略:
使用 XPATH、
following-sibling
和 text 属性:driver.get(url='https://tnnslive.com/match/MpVVddDZigie7GHM9ip8') print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[text()='1st Serve Points Won']//following-sibling::div[1]"))).text)
使用 XPATH,
以下
和 :get_attribute("innerHTML")
driver.get(url='https://tnnslive.com/match/MpVVddDZigie7GHM9ip8') print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[text()='1st Serve Points Won']//following::div[1]"))).get_attribute("innerHTML"))
控制台输出:
64% (29/45)
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
您可以在如何使用 Selenium 检索 WebElement 的文本 - Python 中找到相关讨论
引用
链接到有用的文档:
get_attribute()
方法Gets the given attribute or property of the element.
text
属性返回The text of the element.
- 使用 Selenium 的文本和 innerHTML 之间的区别
评论
0赞
Siebe Jongebloed
8/10/2023
最好只使用一个斜杠,而不是之前使用两个斜杠//
following
1赞
janosch1931
8/10/2023
非常感谢您的回答
评论