我正在使用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
我在做什么错了?
答案 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_NAME
和get_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")))])