![](/img/trans.png)
[英]Finding web element using javascript statments through Python Selenium WebDriver
[英]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_selector
和get_attribute()
:
print(driver.find_element_by_css_selector("div.myOnlyElement div.reaction").get_attribute("innerHTML"))
使用xpath
和text属性:
print(driver.find_element_by_xpath("//div[@class='myOnlyElement']//div[@class='reaction']").text)
理想情况下,要打印我需要的文本文本,您必须为visibility_of_element_located()
引入WebDriverWait ,您可以使用以下任一定位器策略:
使用CSS_SELECTOR
和get_attribute()
:
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.myOnlyElement div.reaction"))).get_attribute("innerHTML"))
使用XPATH
和text属性:
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
链接到有用的文档:
get_attribute()
方法Gets the given attribute or property of the element.
text
属性返回The text of the element.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.