首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Selenium从网页中获取所有元素?

如何使用Selenium从网页中获取所有元素?
EN

Stack Overflow用户
提问于 2017-12-22 02:55:40
回答 2查看 5.5K关注 0票数 0

我的Python代码只查找HTML的第一篇文章,所以它打印相同的链接。如何从HTML中获取所有文章标签?谢谢。

Python代码:

代码语言:javascript
复制
links = driver.find_elements_by_tag_name("article")
for i in links:
    if driver.find_element_by_xpath("//div[@class='inner-article']/a//div[@class='sold_out_tag']").get_attribute("innerHTML") == "sold out":
        print("sold out")
        link = ((driver.find_element_by_xpath("//div[@class='inner-article']/a").get_attribute("href")))
        print(link)
    else:
        print("available")
time.sleep(5)
driver.quit()

HTML:

代码语言:javascript
复制
<article>
   <div class="inner-article"><a style="height:81px;" 
   href="/shop/jackets/jly8dgwqu/w10m2pybx"><img width="81" height="81" 
   src="//d17ol771963kd3.cloudfront.net/139432/vi/AHP1l8fMIcA.jpg" 
   alt="Ahp1l8fmica"><div class="sold_out_tag">sold out</div></a></div>
</article>
<article>
   <div class="inner-article"><a style="height:81px;" 
   href="/shop/jackets/jly8dgwqu/w10m2pybx"><img width="81" height="81" 
   src="//d17ol771963kd3.cloudfront.net/139432/vi/AHP1l8fMIcA.jpg" 
   alt="Ahp1l8fmica"><div class="sold_out_tag">sold out</div></a></div>
</article>
EN

回答 2

Stack Overflow用户

发布于 2017-12-22 03:21:22

要做到这一点,您需要Selenium执行一个称为Action Chains的特殊操作。您可以在顶部导入,如下所示:

代码语言:javascript
复制
from selenium.webdriver.common.action_chains import ActionChains

然后按如下步骤进行:

代码语言:javascript
复制
articles = driver.find_elements_by_tag_name('article')
for article in articles:
    ActionChains(driver).move_to_element(article).perform()
    if article.find_element_by_tag_name('a').text == "sold out":
         print("sold out")
         link = article.find_element_by_xpath('div/a').get_attribute('href')
         print(link)
    else:
         print("available")

对于每个文章web元素,您可以从driver调用相同的方法来只查找该元素。XPath的双斜杠(//)指示它搜索整个DOM,而不考虑任何特定的元素(这就是为什么它每次都定位相同的元素),所以您需要搜索它的直接子元素(即./)。

编辑:默认情况下,包含已售罄文本的元素的CSS属性为display: none;。触发销售一空的文本的唯一方法是在每个元素上进行鼠标操作。幸运的是,Selenium也具有此功能。我还对我的原始代码进行了一些修改,没有售罄的商品没有带有“售罄标签”类的div,所以这会导致错误。

票数 2
EN

Stack Overflow用户

发布于 2017-12-22 20:49:32

根据您共享的HTML,如果您想使用文本sold out打印节点的href,您可以使用以下代码块:

代码语言:javascript
复制
links = driver.find_elements_by_tag_name("article")
for i in links:
    if "sold out" in i.find_elements_by_xpath("//div[@class='inner-article']/a//div[@class='sold_out_tag']").get_attribute("innerHTML") :
        print("sold out")
        print(i.find_element_by_xpath("//div[@class='inner-article']/a").get_attribute("href"))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47931105

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档