鱼C论坛

 找回密码
 立即注册
查看: 1930|回复: 2

[已解决]selenium抓取网页出现了问题

[复制链接]
发表于 2017-8-1 16:36:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
用selenium抓取京东商品的时候,在翻页中总会爆出这样的错误,请问大神我该怎么修改?
  1. selenium.common.exceptions.StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
  2.   (Session info: chrome=54.0.2840.59)
  3.   (Driver info: chromedriver=2.27.440174 (e97a722caafc2d3a8b807ee115bfb307f7d2cfd9),platform=Windows NT 10.0.14393 x86_64)
复制代码

但是用差不多的代码抓取淘宝就会正常运行
这是翻页的函数,通过输入页数来翻页
  1. def next_2_page(page_number):
  2.     try:
  3.         input = wait.until(
  4.             EC.presence_of_element_located((By.CSS_SELECTOR, "#J_bottomPage > span.p-skip > input"))
  5.         )
  6.         submit = wait.until(
  7.             EC.element_to_be_clickable((By.CSS_SELECTOR, "#J_bottomPage > span.p-skip > a"))
  8.         )
  9.         input.clear()
  10.         input.send_keys(page_number)
  11.         submit.click()
  12.         wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#J_bottomPage > span.p-num > a.curr'),str(page_number)))
  13.     except TimeoutException:
  14.         return next_2_page(page_number)
复制代码


以下是源码
  1. from selenium import webdriver
  2. from selenium.webdriver.common.by import By
  3. from selenium.webdriver.support.ui import WebDriverWait
  4. from selenium.webdriver.support import expected_conditions as EC
  5. from selenium.common.exceptions import TimeoutException

  6. browser=webdriver.Chrome()
  7. wait=WebDriverWait(browser, 10)
  8. def search():
  9.     browser.get('https://www.jd.com/')
  10.     try:
  11.         input = wait.until(
  12.             EC.presence_of_element_located((By.CSS_SELECTOR, "#key"))
  13.         )
  14.         submit=wait.until(
  15.             EC.element_to_be_clickable((By.CSS_SELECTOR, "#search > div > div.form > button"))
  16.         )
  17.         input.send_keys('美食')
  18.         submit.click()
  19.         total = wait.until(
  20.             EC.presence_of_element_located((By.CSS_SELECTOR, '#J_bottomPage > span.p-skip > em:nth-child(1) > b')))
  21.     except TimeoutException:
  22.         search()

  23. def next_page(page_number):
  24.     next=wait.until(
  25.         EC.element_to_be_clickable((By.CSS_SELECTOR, "#J_topPage > a.fp-next"))
  26.         )
  27.     next.click()
  28.     wait.until(EC.text_to_be_present_in_element(
  29.         (By.CSS_SELECTOR, '#J_topPage > span > b'), str(page_number)))

  30. def next_2_page(page_number):
  31.     try:
  32.         input = wait.until(
  33.             EC.presence_of_element_located((By.CSS_SELECTOR, "#J_bottomPage > span.p-skip > input"))
  34.         )
  35.         submit = wait.until(
  36.             EC.element_to_be_clickable((By.CSS_SELECTOR, "#J_bottomPage > span.p-skip > a"))
  37.         )
  38.         input.clear()
  39.         input.send_keys(page_number)
  40.         submit.click()
  41.         wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR, '#J_bottomPage > span.p-num > a.curr'),str(page_number)))
  42.     except TimeoutException:
  43.         return next_2_page(page_number)
  44. def main():
  45.     search()
  46.     for each in range(2,5):
  47.         next_2_page(each)


  48. if __name__=='__main__':
  49.     main()
复制代码
最佳答案
2017-8-1 21:19:12
本帖最后由 小锟 于 2017-8-1 21:23 编辑

可以的
把等待时间设长一点,错了估计是没加载好
或者你在代码中加一句把页面拉到底部
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-8-1 21:19:12 | 显示全部楼层    本楼为最佳答案   
本帖最后由 小锟 于 2017-8-1 21:23 编辑

可以的
把等待时间设长一点,错了估计是没加载好
或者你在代码中加一句把页面拉到底部
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-8-3 08:54:56 | 显示全部楼层
小锟 发表于 2017-8-1 21:19
可以的
把等待时间设长一点,错了估计是没加载好
或者你在代码中加一句把页面拉到底部

是加载数据问题,非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 00:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表