鱼C论坛

 找回密码
 立即注册
查看: 1881|回复: 3

使用selenium模拟登陆淘宝报错

[复制链接]
发表于 2019-12-20 11:09:50 | 显示全部楼层 |阅读模式
10鱼币
  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. class tb_infos:

  6.     # 初始化对象
  7.     def __init__(self):
  8.         url = 'https://login.taobao.com/member/login.jhtml'
  9.         self.url = url

  10.         options = webdriver.ChromeOptions()
  11.         options.add_experimental_option('prefs', {'profile.managed_default_content_settings.images': 2})
  12.         options.add_experimental_option('excludeSwitches', ['enable-automation'])

  13.         self.browser = webdriver.Chrome(options=options)
  14.         self.wait = WebDriverWait(self.browser, 10)

  15.     # 登录淘宝
  16.     def login(self):

  17.         self.browser.get(self.url)

  18.         password_login = self.wait.until(
  19.             EC.presence_of_element_located((By.CSS_SELECTOR, '.qrcode-login > .login-links > .forget-pws')))
  20.         password_login.click()

  21.         wb_login = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.weibo-login')))
  22.         wb_login.click()

  23.         wb_user = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.username > .W_input')))
  24.         wb_user.send_keys(wb_username)

  25.         wb_pwd = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.password > .W_input')))
  26.         wb_pwd.send_keys(wb_password)

  27.         submit = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.btn-tip > a > span')))
  28.         submit.click()

  29.         tb_name = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,
  30.                                                                   '.site-nav-bd > .site-nav-bd-1 > li#J_SiteNavLogin > .site-nav-menu-hd > .site-nav-user > a.site-nav-login-info-nick')))
  31.         print(tb_name.text)


  32. if __name__ == '__main__':
  33.     wb_username = '微博账号'
  34.     wb_password = '微博密码'

  35.     a = tb_infos()
  36.     a.login()
复制代码




运行的时候报错:


        Traceback (most recent call last):
  File "D:/项目/Python/淘宝登录/tb_login.py", line 53, in <module>
    a.login()
  File "D:/项目/Python/淘宝登录/tb_login.py", line 28, in login
    EC.presence_of_element_located((By.CSS_SELECTOR, '.qrcode-login > .login-links > .forget-pws')))
  File "D:\Program Files\Anaconda\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
    raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:


进程已结束,退出代码 1

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-12-20 14:13:04 | 显示全部楼层
EC.presence_of_element_located((By.CSS_SELECTOR, '.qrcode-login > .login-links > .forget-pws')))
网页上定位不到这个CSS_SELECTOR
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-21 19:55:44 | 显示全部楼层
gink 发表于 2019-12-20 14:13
**** 作者被禁止或删除 内容自动屏蔽 ****

是timeout exception,是超时了
应该“time.sleep”一会儿让它加载出来
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-9 17:51:06 | 显示全部楼层
根据你提供的错误信息,看起来是等待页面元素超时导致的错误。可以尝试增加等待时间或者使用更加精准的元素定位方式。

另外,你的代码中似乎没有将微博账号和密码传递给程序,建议在代码开头将这两个变量赋值。

修改后的代码如下:
  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. class tb_infos:

  6.     # 初始化对象
  7.     def __init__(self):
  8.         url = 'https://login.taobao.com/member/login.jhtml'
  9.         self.url = url

  10.         options = webdriver.ChromeOptions()
  11.         options.add_experimental_option('prefs', {'profile.managed_default_content_settings.images': 2})
  12.         options.add_experimental_option('excludeSwitches', ['enable-automation'])

  13.         self.browser = webdriver.Chrome(options=options)
  14.         self.wait = WebDriverWait(self.browser, 20)

  15.     # 登录淘宝
  16.     def login(self, wb_username, wb_password):

  17.         self.browser.get(self.url)

  18.         password_login = self.wait.until(
  19.             EC.presence_of_element_located((By.CSS_SELECTOR, '.qrcode-login > .login-links > .forget-pws')))
  20.         password_login.click()

  21.         wb_login = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.weibo-login')))
  22.         wb_login.click()

  23.         wb_user = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.username > .W_input')))
  24.         wb_user.send_keys(wb_username)

  25.         wb_pwd = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.password > .W_input')))
  26.         wb_pwd.send_keys(wb_password)

  27.         submit = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '.btn-tip > a > span')))
  28.         submit.click()

  29.         tb_name = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,
  30.                                                                   '.site-nav-bd > .site-nav-bd-1 > li#J_SiteNavLogin > .site-nav-menu-hd > .site-nav-user > a.site-nav-login-info-nick')))
  31.         print(tb_name.text)


  32. if __name__ == '__main__':
  33.     wb_username = '微博账号'
  34.     wb_password = '微博密码'

  35.     a = tb_infos()
  36.     a.login(wb_username, wb_password)
复制代码

其中,我增加了一个 login 方法的两个参数 wb_username 和 wb_password,并且在最后一行调用 login 方法时,将这两个参数传入方法中。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 05:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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