54264 发表于 2021-2-3 11:09

selenium自动化使用QQ登录百度求助

本帖最后由 54264 于 2021-2-4 14:26 编辑

使用QQ登录时,选择电脑上登录的QQ点击登录百度时报错,报错如图,请各位大佬指点下!!!

代码
from selenium import webdriver
import time

wd = webdriver.Chrome()
wd.maximize_window()
wd.get('https://www.baidu.com/')
wd.implicitly_wait(10)

element = wd.find_element_by_css_selector('#u1 > a').click()

# 使用QQ登录
element = wd.find_element_by_css_selector('#pass_phoenix_btn > ul > li.bd-acc-qzone > a').click()

for handle in wd.window_handles:
    wd.switch_to.window(handle)
    if 'QQ帐号安全登录' in wd.title:
      break

element = wd.find_element_by_xpath('//div[@class="qlogin_list"]//a/*').click()

选中的xpath如图所示


maoxingren 发表于 2021-2-3 11:28

wxy1997 发表于 2021-2-3 11:31

from selenium import webdriver
import pyautogui
import os
from time import sleep


def login(username, password):
    # 加启动配置
    option = webdriver.ChromeOptions()
    # V76以及以上版本
    option.add_experimental_option('useAutomationExtension', False)
    option.add_experimental_option('excludeSwitches', ['enable-automation'])

    # 保护措施,避免失控
    pyautogui.FAILSAFE = True
    # 为所有的PyAutoGUI函数增加延迟。默认延迟时间是0.1秒。
    pyautogui.PAUSE = 0.5

    # 引入chromeDriver.exe (放到浏览器安装同级目录下)
    chromeDriver = "D:/SoftWare/baifen/CentBrowser/Application/chromedriver.exe"

    # environ是一个字符串所对应环境的映像对象;
    os.environ["webdriver.chrome.driver"] = chromeDriver
    browser = webdriver.Chrome(chromeDriver, options=option)

    # 设置浏览器需要打开的url
    url = "https://www.baidu.com/"
    browser.get(url)

    # 最大化窗口
    browser.maximize_window()
    # 点击登录
    # browser.find_element_by_class_name("s-top-login-btn").click()
    sleep(1)
    # 转灰度操作=关闭 grayscale
    # 需要安装opencv-python 可选参数confidence的设置是关键,一般很多人不设置,数值在0-1之间,1为100%相似,
    loginXY = pyautogui.locateCenterOnScreen('screenshot/login.png', grayscale=False, confidence=0.5)
    # 点击登录
    pyautogui.click(loginXY)

    sleep(1)
    # 点击用户名密码登录
    userLoginXY = pyautogui.locateCenterOnScreen('screenshot/userLogin.png', grayscale=False, confidence=0.5)
    pyautogui.click(userLoginXY)
    sleep(0.5)

    # 输入用户名 和 密码
    browser.find_element_by_xpath("//div[@class='tang-foreground']//input[@name='userName']").send_keys(username)
    sleep(0.5)
    browser.find_element_by_xpath("//div[@class='tang-foreground']//input[@name='password']").send_keys(password)
    # 提交登录表单
    browser.find_element_by_class_name("pass-button-submit").submit()


if __name__ == '__main__':
    # usernamepassword 替换成自己的百度账号密码
    login('username', 'password')

wxy1997 发表于 2021-2-3 11:32

稍微改下就可以了这是百度账号密码登录

萌萌哒的小白 发表于 2021-2-3 11:41

你轮训切换完window需要再切换下iframe啊!我这边看到是在iframe里面的.
wd.switch_to.frame("ptlogin_iframe")
然后在定位点击

Test_dada 发表于 2021-2-3 11:50

第32行代码定位不到,解决方法:查看是否嵌套iframe/是否开另外窗口
如果是,需要先跳转再定位
都不是的话,在跳转后加个sleep等待下页面加载,即可

Test_dada 发表于 2021-2-3 12:00

from selenium import webdriver
import time

wd = webdriver.Chrome()
wd.maximize_window()
wd.get('https://www.baidu.com/')
wd.implicitly_wait(10)

element = wd.find_element_by_css_selector('#u1 > a').click()

# 使用QQ登录
element = wd.find_element_by_css_selector('#pass_phoenix_btn > ul > li.bd-acc-qzone > a').click()

for handle in wd.window_handles:
    wd.switch_to.window(handle)
    if 'QQ帐号安全登录' in wd.title:
      break

wd.switch_to.frame("ptlogin_iframe")
element = wd.find_element_by_xpath('//div[@class="qlogin_list"]//a/*').click()

加上倒数第二行的iframe跳转就好了

赵无良影视 发表于 2021-4-5 15:29

页: [1]
查看完整版本: selenium自动化使用QQ登录百度求助