遵循我之前的two questions:Selenium是否有像BeautifulSoup的Find All这样的东西?

我需要在类似this one的页面中获取H2标签的所有内容.

JeffC在前面的问题中带来的伟大代码 for each 页面获取一个特定标签的内容.但在这里,我的每个页面有多达20个类似的标签.

此外,我需要获取H2和Href的文本.

当前状态:

driver = webdriver.Chrome(options=options)
driver.maximize_window()
wait = WebDriverWait(driver, 10)

url = 'http://www.biblioteca.presidencia.gov.br/presidencia/ex-presidentes/jose-sarney/discursos/1985?b_start:int=0'
driver.get(url)
h2 = wait.until(EC.visibility_of_element_located((By.CLASS_NAME, "tileHeadline"))).text
print(h2)

到目前为止,该代码仅带来每个页面中的第一个元素.我应该更改EC元素中的规范吗?

推荐答案

我知道您已经接受了一个答案,但它实际上并没有解释问题是什么.主要问题是

single_element = wait.until(EC.visibility_of_element_located())
                                                   ^ singular element

返回单个元素.它有一个复数版本,返回一组元素,

element_collection = wait.until(EC.visibility_of_all_elements_located())
                                                            ^ plural elementS

使用此信息,我们可以更新您当前的代码,

driver = webdriver.Chrome(options=options)
driver.maximize_window()
wait = WebDriverWait(driver, 10)

url = 'http://www.biblioteca.presidencia.gov.br/presidencia/ex-presidentes/jose-sarney/discursos/1985?b_start:int=0'
driver.get(url)
links = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "h2 a")))
for link in links:
    print(link.text)
    print(link.get_attribute("href"))

其输出

15 de março de 1985 - Pronunciamento do Presidente José Sarney, no exercício da Presidência da República, ao empossar o ministério
http://www.biblioteca.presidencia.gov.br/presidencia/ex-presidentes/jose-sarney/discursos/1985/01.pdf/view
17 de março de 1985 - Pronunciamento da Presidente José Sarney, no exercício da Presidência da república, por ocasião da abertura da primeira reunião do ministério da nova República
http://www.biblioteca.presidencia.gov.br/presidencia/ex-presidentes/jose-sarney/discursos/1985/02.pdf/view
...

另外,请不要使用定位器,例如

.find_elements("css selector", "h2 a")

其中"css selector"等是字符串.是的,它可以工作,但很容易出现拼写错误,并且直到您运行脚本并且它失败后,您的IDE才会知道拼写错误.相反,如下所示使用By.CSS_SELECTOR

.find_elements(By.CSS_SELECTOR, "h2 a")

您的IDE将帮助您自动完成它,如果存在拼写错误,IDE将在您运行它之前将其标记为错误,从而节省时间.

Python相关问答推荐

如何使用矩阵在sklearn中同时对每个列执行matthews_corrcoef?

Python -根据另一个数据框中的列编辑和替换数据框中的列值

添加包含中具有任何值的其他列的计数的列

无法使用equals_html从网址获取全文

如何调整spaCy token 化器,以便在德国模型中将数字拆分为行末端的点

' osmnx.shortest_track '返回有效源 node 和目标 node 的'无'

如何将Docker内部运行的mariadb与主机上Docker外部运行的Python脚本连接起来

我如何使法国在 map 中完全透明的代码?

如果值发生变化,则列上的极性累积和

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

Django REST Framework:无法正确地将值注释到多对多模型,不断得到错误字段名称字段对模型无效'<><>

joblib:无法从父目录的另一个子文件夹加载转储模型

如何使用Numpy. stracards重新编写滚动和?

Python避免mypy在相互引用中从另一个类重定义类时失败

在Docker容器(Alpine)上运行的Python应用程序中读取. accdb数据库

Flask运行时无法在Python中打印到控制台

BeautifulSoup-Screper有时运行得很好,很健壮--但有时它失败了::可能这里需要一些更多的异常处理?

高效生成累积式三角矩阵

pytest、xdist和共享生成的文件依赖项

如何在Python中从html页面中提取html链接?