繁体   English   中英

使用 selenium python 查找动态网站的 web 元素

[英]Finding web element of dynamic websites using selenium python

我想根据它们的 Web 元素(xpath、类等)抓取几个字段的文本。

 <div class = myOnlyElement> <div> ...... <div class = afafasf> ......</div> <div class = klklkl> ...... <div class = qwqwqwq> ...... <div class = reaction> text i need</div> </div> </div> </div> </div> <div class = myElement> <div> ...... <div class = dfdfdf> ......</div> <div class = ghgghghg> ...... <div class = erererere> ...... <div class = reaction> text i don't need</div> </div> </div> </div> </div>

假设我有这样的元素后端。 我发现元素如下:

myelem = driver.find_element_by_classname('myOnlyElement')

现在我只想用我需要的文本选择类“反应”。 我这样做:

myelem.find_element_by_classname('reaction')

如果这个类存在,它会捕获它,但在某些情况下它会用于class = "reaction"其文本是“text i don't need”

希望我已经清楚地提到了我的问题。 你能帮我么

我的朋友,关于这些东西的最佳解决方案,右键单击网页,在那里您可以看到文本。 右键单击 DOM 检查器,然后单击复制 -> 复制完整 XPath 值。 那么您可能需要执行 .text .source 来获取这些值。 但试着玩。

要打印我需要的文本文本,您可以使用以下任一定位器策略

  • 使用css_selectorget_attribute()

     print(driver.find_element_by_css_selector("div.myOnlyElement div.reaction").get_attribute("innerHTML"))
  • 使用xpathtext属性:

     print(driver.find_element_by_xpath("//div[@class='myOnlyElement']//div[@class='reaction']").text)

理想情况下,要打印我需要的文本文本,您必须为visibility_of_element_located()引入WebDriverWait ,您可以使用以下任一定位器策略

  • 使用CSS_SELECTORget_attribute()

     print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.myOnlyElement div.reaction"))).get_attribute("innerHTML"))
  • 使用XPATHtext属性:

     print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='myOnlyElement']//div[@class='reaction']"))).text)
  • 注意:您必须添加以下导入:

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


奥特罗

链接到有用的文档:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM