无法刮所有h2标签

时间:2019-12-09 12:26:35

标签: python-3.x selenium

我正在使用selenium和python抓取一个网站,并且该网站中有许多我想抓取的h2标签。

<h2>john paplos<h2>
<h2>john smith</h2>
....

我想抓取所有这些h2标签并将它们显示在终端上。

这是我的代码:

for i in temp:
    temp = driver.find_element_by_tag_name('h2').text
    print (temp)

此代码在没有for loop的情况下可以正常工作,但是当我添加for loop时,它给我一个名称错误

for i in temp:
NameError: name 'temp' is not defined

我在做什么错了?

2 个答案:

答案 0 :(得分:3)

为了定位多个元素,而不仅仅是一个元素,硒提供了find_elements_by_*()组方法。就您而言,find_elements_by_tag_name()可以胜任:

for h2 in driver.find_elements_by_tag_name('h2'):
    print(h2.text)

进一步细分:

  • find_elements_by_tag_name()返回WebElement个实例的列表
  • 这意味着h2变量的类型为WebElement
  • .text是我们打印出的WebElement的属性

答案 1 :(得分:1)

此错误消息...

for i in temp:
NameError: name 'temp' is not defined

...表示在行中尝试使用变量 temp 时未定义/初始化:

for i in temp:

但是似乎您已经接近。要打印 <h2> 标签中的所有文本,您可以为visibility_of_all_elements_located()引入 WebDriverWait ,您可以使用以下Locator Strategy

  • 使用TAG_NAME text 属性:

    print([my_elem.text for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.TAG_NAME, "h2")))])
    
  • 使用TAG_NAMEget_attribute("innerHTML")

    print([my_elem.get_attribute("innerHTML") for my_elem in WebDriverWait(driver, 5).until(EC.visibility_of_all_elements_located((By.TAG_NAME, "h2")))])