|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
用selenium抓取京东商品的时候,在翻页中总会爆出这样的错误,请问大神我该怎么修改?- selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
- (Session info: chrome=54.0.2840.59)
- (Driver info: chromedriver=2.27.440174 (e97a722caafc2d3a8b807ee115bfb307f7d2cfd9),platform=Windows NT 10.0.14393 x86_64)
复制代码
但是用差不多的代码抓取淘宝就会正常运行
这是翻页的函数,通过输入页数来翻页
- def next_2_page(page_number):
- try:
- input = wait.until(
- EC.presence_of_element_located((By.CSS_SELECTOR, "#J_bottomPage > span.p-skip > input"))
- )
- submit = wait.until(
- EC.element_to_be_clickable((By.CSS_SELECTOR, "#J_bottomPage > span.p-skip > a"))
- )
- input.clear()
- input.send_keys(page_number)
- submit.click()
- wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#J_bottomPage > span.p-num > a.curr'),str(page_number)))
- except TimeoutException:
- return next_2_page(page_number)
复制代码
以下是源码
- 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
- browser=webdriver.Chrome()
- wait=WebDriverWait(browser, 10)
- def search():
- browser.get('https://www.jd.com/')
- try:
- input = wait.until(
- EC.presence_of_element_located((By.CSS_SELECTOR, "#key"))
- )
- submit=wait.until(
- EC.element_to_be_clickable((By.CSS_SELECTOR, "#search > div > div.form > button"))
- )
- input.send_keys('美食')
- submit.click()
- total = wait.until(
- EC.presence_of_element_located((By.CSS_SELECTOR, '#J_bottomPage > span.p-skip > em:nth-child(1) > b')))
- except TimeoutException:
- search()
- def next_page(page_number):
- next=wait.until(
- EC.element_to_be_clickable((By.CSS_SELECTOR, "#J_topPage > a.fp-next"))
- )
- next.click()
- wait.until(EC.text_to_be_present_in_element(
- (By.CSS_SELECTOR, '#J_topPage > span > b'), str(page_number)))
- def next_2_page(page_number):
- try:
- input = wait.until(
- EC.presence_of_element_located((By.CSS_SELECTOR, "#J_bottomPage > span.p-skip > input"))
- )
- submit = wait.until(
- EC.element_to_be_clickable((By.CSS_SELECTOR, "#J_bottomPage > span.p-skip > a"))
- )
- input.clear()
- input.send_keys(page_number)
- submit.click()
- wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#J_bottomPage > span.p-num > a.curr'),str(page_number)))
- except TimeoutException:
- return next_2_page(page_number)
- def main():
- search()
- for each in range(2,5):
- next_2_page(each)
- if __name__=='__main__':
- main()
复制代码
本帖最后由 小锟 于 2017-8-1 21:23 编辑
可以的
把等待时间设长一点,错了估计是没加载好
或者你在代码中加一句把页面拉到底部
|
|