我正在使用python/selenium存档一些帖子。它们是简单的文本+图像。由于该网站需要登录,所以我使用selenium来访问它。
问题是,页面显示了所有的帖子,他们只有在点击"阅读更多"的文本时才能完全可读,这会弹出一个完整的文本/图像。
所以我写了一个脚本来滚动页面,点击阅读更多,刮掉文章,关闭它,然后转到下一个。
我遇到的问题是,每个阅读更多按钮是一个相同的元素:
<a href="javascript:;" style="font-weight: 400">read more</a>
如果我尝试使用xpath遍历它们,就会遇到它们的格式也不同的问题,例如:
//*[@id="page"]/div[2]/article[10]/div[2]/ul/li/a
//*[@id="page"]/div[2]/article[14]/div[2]/p[3]/a
我尝试格式化我的循环,只循环文章编号,但当然xpath的终止方式不同。是否有一种方法可以将通配符添加到xpath的后半部分?还是只根据文章编号搜索?
/
用于直接子,使用//
代替从<article>
到<a>
//*[@id="page"]/div[2]/article//a[.="read more"]
这将给你一个可以迭代的元素列表。你可能能够删除[.="read more"]
,但它可能捕获不相关的<a>
标签,这取决于html结构的其余部分。
您也可以尝试直接通过文本
查找read more
元素。//a[.="read more"]
我建议在xpath上使用CSS选择器。CSS选择器提供了更快、更清晰、更简单的方式来处理这些查询。
('a[href^="javascript"]')
这将选择所有href属性值以"javascript"开头的元素。这就是你要找的…
你可以在selenium中了解更多关于通过CSS选择器定位元素的信息。
readMore = driver.find_element(By.CSS_SELECTOR, 'a[href^="javascript"]')
和关于通过链接文本定位超链接
readMore_link = driver.find_elements(By.LINK_TEXT, 'javascript')