【发布时间】:2020-03-19 23:18:46
【问题描述】:
我不熟悉使用 selenium 和 python 进行网络抓取。我试图从中抓取数据的网页在我试图访问的特定 div 中有 href 元素。我尝试使用 find_element_by_xpath() 来获取它,但是它表明它找不到元素。然后我尝试使用该类查找 div 并从中找到 href,但它表明我的元素已过时。我很难理解为什么它是陈旧的,因为我发现第二种方法似乎适用于教程/stackoverflow 上的人。
基本的 HTML 是这样的:
<div class=div1>
<ul>
<li>
<a href='path/to/div1stuff/1'>Generic string 1</a>
<a href='path/to/div1stuff/2'>Generic string 2</a>
<a href='path/to/div1stuff/3'>Generic string 3</a>
</li>
</ul>
</div>
<div class=div2>
<ul>
<li>
<a href='path/to/div2stuff/1'>Generic string 1</a>
<a href='path/to/div2stuff/2'>Generic string 2</a>
<a href='path/to/div2stuff/3'>Generic string 3</a>
</li>
</ul>
</div>
还有我的python代码:
class Scraper(object):
def __init__(self):
pass
def execute(self):
""" Run class methods """
self.home = "https://www.website2scrape.com/"
self.get_stuff()
def get_stuff(self):
""" Get stuff """
driver = webdriver.Firefox("/usr/local/bin/")
driver.get(self.home)
# Example 1
driver.find_element_by_xpath("//div[@class='div2']//a[contains(@href,'Generic string 2')]").click()
# Example 2
elements = driver.find_elements_by_css_selector("div.div2")
for element in elements:
print(element.get_attribute("href"))
示例 1 给出了错误元素找不到。
示例 2 给出了元素过期的错误
我正在尝试单击 div2 中的通用字符串 2 href,但是如果我只是通过使用获取 href:
driver.find_element_by_xpath('//a[contains(@href, "Generic string 2")]')
它点击来自 div1 的 href。如何从特定的 div 类中获取 href?
【问题讨论】:
-
总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是屏幕截图)放在有问题的(不是评论)中。还有其他有用的信息。
-
是您在
div中而不是在a中搜索href的第二个示例 - 您应该尝试"div.div2 a" -
在第一个例子中你必须使用
text(),而不是@href
标签: python selenium web-scraping