我有一个我想从中抓取数据的网址。我正在使用selenium打开网站。我想访问heading
类中的页面并从此页面获取信息。如果它没有类名,我不确定如何点击div中的链接。它给了我以下错误消息:
无法找到元素
html 如下所示
<div class="heading">
<a href="....">Text here</a>
</div>
<div class="heading">
<a href="....">Text here</a>
</div>
PYTHON
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
def init_driver():
driver = webdriver.Firefox()
driver.wait = WebDriverWait(driver, 5)
return driver
def lookup(driver, query):
driver.get("http://www.sportbirmingham.org/directory?sport=&radius=15&postcode=B16+8QG&submit=Search")
try:
parentElement = driver.find_elements_by_class_name("heading")
print parentElement
elementList = parentElement.find_element_by_tag_name("a")
print elementList
except TimeoutException:
print("not found")
if __name__ == "__main__":
driver = init_driver()
lookup(driver, "Selenium")
time.sleep(5)
driver.quit()
答案 0 :(得分:0)
您想要访问heading
类下的内部标记,您应该用>
替换空格
改变这个:
button = driver.wait.until(EC.element_to_be_clickable(
(By.css, ".heading a")))
要:
button = driver.wait.until(EC.element_to_be_clickable(
(By.css, ".heading>a")))
答案 1 :(得分:0)
在您的代码中,您尝试拨打parentElement.find_element_by_tag_name('a')
而parentElement
是一个列表,因此您无法应用find_element_by_tag_name()
方法。请尝试以下代码:
Python 3.6
def lookup(driver, query):
driver.get("http://www.sportbirmingham.org/directory?sport=&radius=15&postcode=B16+8QG&submit=Search")
try:
[print(link.text) for link in driver.find_elements_by_xpath('//h2[@class="heading"]/a')]
except TimeoutException:
print("not found")
Python 2.7
def lookup(driver, query):
driver.get("http://www.sportbirmingham.org/directory?sport=&radius=15&postcode=B16+8QG&submit=Search")
try:
for link in driver.find_elements_by_xpath('//h2[@class="heading"]/a'):
print link.text
except TimeoutException:
print "not found"
如果您想点击确切链接,可以使用:
driver.find_element_by_link_text('Sport Birmingham').click()
答案 2 :(得分:0)
您正在尝试在包含类a
的第一个元素中找到heading
标记元素。你需要在这一行之后:
parentElement = driver.find_elements_by_class_name("heading")
循环结果(即parentElement s )并获取其下的a
标记,然后获取它的文本。通过查看您的网址,第一个heading
div下面没有a
,因此出错。
编辑:循环遍历元素(警告:我知道小python)
for a_element in parentElements:
if (a_element.find_elements_by_tag_name('a').count > 0)
a_text = a_element.find_element_by_tag_name('a').text