我正在尝试从网站获取电子邮件地址列表,并且非常接近。我的代码如下所示。我收到以下错误。
发生的情况是,有一个链接页面,然后单击该链接,在下一页中有一个电子邮件地址。
单击链接后,我试图打印每个页面内的电子邮件地址。
这是链接点击进入的页面示例 http://www.sportbirmingham.org/directory/sport-birmingham.
xTraceback(最近一次调用最后一次):文件“scrape.py”,第 34 行,位于
查找(驱动程序)文件“scrape.py”,第26行,在查找中
emailAdress = driver.find_element_by_xpath('//div[@id="widget-contact"]//a').get_attribute('href')
文件
“/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py”,
第 293 行,在 find_element_by_xpath 中
返回 self.find_element(by=By.XPATH, value=xpath) 文件“/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py”,
第 752 行,在 find_element 中
'值': 值})['值'] 文件“/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py”,
第236行,执行中
self.error_handler.check_response(response) 文件“/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py”,
第 192 行,在 check_response 中
引发异常类(消息,屏幕,堆栈跟踪)selenium.common.exceptions.InvalidSelectorException:
我在用python 2.7.13
.
# -*- coding: utf-8 -*-
from lxml import html
import requests
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):
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'):
link.click()
emailAdress = driver.find_element_by_xpath('//div[@id="widget-contact"]//a').get_attribute('href')
print emailAdress
except TimeoutException:
print "not found"
if __name__ == "__main__":
driver = init_driver()
lookup(driver)
time.sleep(5)
driver.quit()
当我尝试继续访问下一页链接时,出现以下错误
文件“scrape.py”,第 43 行,位于
查找(驱动程序)文件“scrape.py”,第26行,在查找中
links.extend([link.get_attribute('href') for link in driver.find_elements_by_xpath('//h2[@class="heading"]/a')]) 文件
“/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webelement.py”,
第 139 行,在 get_attribute 中
self,名称)文件“/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py”,
第 465 行,在execute_script 中
'args':converted_args})['value']文件“/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py”,
第236行,执行中
self.error_handler.check_response(response) 文件“/usr/local/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py”,
第 192 行,在 check_response 中
引发异常类(消息,屏幕,堆栈跟踪)selenium.common.exceptions.StaleElementReferenceException:消息:
元素引用已过时。要么该元素不再
附加到 DOM 或页面已刷新。
你只需要更精确的 XPATH (也可以调用text方法):
emailAdress = driver.find_element_by_xpath('//div[@class="body"]/dl/dd[2]').text
但这个例子适用于Python3。请让我知道这对你有没有用。
我还建议使用 Chrome 的“XPath Helper”扩展。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)