鱼C论坛

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

使用selenium模拟登陆淘宝报错

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


class tb_infos:

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

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

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

    # 登录淘宝
    def login(self):

        self.browser.get(self.url)

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

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

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

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

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

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


if __name__ == '__main__':
    wb_username = '微博账号'
    wb_password = '微博密码'

    a = tb_infos()
    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 | 显示全部楼层
根据你提供的错误信息,看起来是等待页面元素超时导致的错误。可以尝试增加等待时间或者使用更加精准的元素定位方式。

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

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


class tb_infos:

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

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

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

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

        self.browser.get(self.url)

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

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

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

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

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

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


if __name__ == '__main__':
    wb_username = '微博账号'
    wb_password = '微博密码'

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 21:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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