使用 Xpath 使用 Selenium 进行网络抓取

Webscraping with Selenium using Xpath

提问人:janosch1931 提问时间:8/10/2023 最后编辑:undetected Seleniumjanosch1931 更新时间:8/10/2023 访问量:45

问:

我正在寻找一些关于 https://tnnslive.com/ 的数字

我在 tnnslive.com 上寻找的数字:

the numbers I'm looking for on 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)

为什么?我该如何解决这个问题?

selenium-webdriver webdriver webdriver 等待 xpath-1.0

评论


答:

0赞 undetected Selenium 8/10/2023 #1

要打印与网站内第一位玩家的 1st Serve Points Won 相关的文本,您需要诱导 WebDriverWait visibility_of_element_located(),并且您可以使用以下任一定位器策略

  • 使用 XPATHfollowing-siblingtext 属性:

    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 中找到相关讨论


引用

链接到有用的文档:

评论

0赞 Siebe Jongebloed 8/10/2023
最好只使用一个斜杠,而不是之前使用两个斜杠//following
1赞 janosch1931 8/10/2023
非常感谢您的回答