Seleniumページジャンプの問題-QQメールボックスログイン後に要素が見つかりません

QQメールボックスの自動ログインについては、以下を参照してください:Pythonはスライド検証を実装しますログイン
後、要素「writeletter」を見つける必要があります:それはまったく見つけることができず、エラーが報告される可能性のある場所は変更されました。iframeと誤った配置位置の問題ではありません:[NoSuchElementException]
現時点では、ページジャンプを検討する必要があります:python-selenium window switch

ただし、QQメールボックスの状況は異なります。ドメイン名はすべてmail.qq.comですが、ログイン後にいくつかの新しいサブドメインが追加されます。したがって、印刷ウィンドウハンドルは、ログインの前後で同じであることがわかりますが、ドメイン名が変更されたため、エラーが発生します。理由は、ページ要素がロードされていないため、要素を見つけることができないため、明示的に待機することで解決できます。

ログインコードは次のとおりです。

import time
import paramiko
import pyautogui
import os
from time import sleep
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from Auto_Test.base_action import match
import pyperclip
import random
from Auto_Test.base_action import random_and_write
browser = webdriver.Firefox()



def login_in():
    global browser
    browser.maximize_window()
    browser.get("https://mail.qq.com/")
    browser.switch_to.frame("login_frame")
    browser.find_element_by_class_name("inputstyle").clear()
    browser.find_element_by_class_name("inputstyle").send_keys("3540830376")
    browser.find_element_by_class_name("inputstyle.password").clear()
    browser.find_element_by_class_name("inputstyle.password").send_keys("LUO808089lin")
    browser.find_element_by_id("login_button").click()
    browser.find_element_by_class_name("login_button").click()
    time.sleep(2)
    browser.switch_to.frame("tcaptcha_iframe")

    print("~" * 10)
    titl = browser.title
    print(titl)
    now_url = browser.current_url
    print(now_url)
    print("~" * 10)

    time.sleep(3)
    # 等待图片加载出来
    WebDriverWait(browser, 5, 0.5).until(
        EC.presence_of_element_located((By.ID, "tcaptcha_drag_button")))

    current_window = browser.current_window_handle  # 获取当前窗口handle name
    print(current_window,"####")
    lx,ly=match("QQmail-slick")
    lz=[x for x in range(150,200,3)]
    for i in lz:
        pyautogui.moveTo(lx,ly)
        pyautogui.dragRel(i,0,duration=2,button='left')
        time.sleep(1)
        pyautogui.moveRel(-i,0)

        try:
            alert = browser.find_element_by_id('guideText').text
        except Exception as e:
            print('get alert error: %s' % e)
            alert = ''
        if alert:
            print(u'滑块位移需要调整: %s' % alert)
            sleep(3)
        else:
            print('滑块验证通过')
            browser.switch_to.parent_frame()  # 验证成功后跳回最外层页面
            break
    browser.switch_to.default_content()

情報を送信するための機能コード:


def send_message():
    global browser
    print("切换之前")
    print("*"*10)
    titl=browser.title
    print(titl)
    now_url=browser.current_url
    print(now_url)
    print("*"*10)
    time.sleep(3)
    current_window = browser.current_window_handle  # 获取当前窗口handle name
    print(current_window,"&&&&&")
    all_window = browser.window_handles
    print(all_window,"&&&")
    print("*"*18)
    browser.switch_to.window(current_window)
    print("切换之后")
    print("$" * 10)
    titl = browser.title
    print(titl)
    now_url = browser.current_url
    print(now_url)
    print("$" * 10)
    current_window = browser.current_window_handle  # 获取当前窗口handle name
    print(current_window, "!!!!")
    all_window = browser.window_handles
    print(all_window, "!!!")
    print("*"*18)

main関数にあるのは、ログイン後のページ要素「writeletter」です。

if __name__ == '__main__':
    login_in()
    WebDriverWait(browser, 15, 0.5).until(
        EC.presence_of_element_located((By.ID, "composebtn_td")))
    send_message()

操作の結果は次のとおりです。


~~~~~~~~~~
登录QQ邮箱
https://mail.qq.com/
~~~~~~~~~~
18 ####
切换之前
**********
登录QQ邮箱
https://mail.qq.com/
**********
18 &&&&&
['18'] &&&
******************
切换之后
$$$$$$$$$$
QQ邮箱
https://mail.qq.com/cgi-bin/frame_html?sid=1n7EDcWwNTlb5TZW&r=f256c0f155b6b5bf0aecf1bb407bbd7f
$$$$$$$$$$
18 !!!!
['18'] !!!
******************

待機を追加したら、それで十分です。
ジャンプウィンドウのコードを削除しても、結果は同じです。

browser.switch_to.window(current_window)

自分の手術の結果に矛盾がある場合は、交換して話し合い、一緒に学んでください!

おすすめ

転載: blog.csdn.net/liulanba/article/details/115319492
おすすめ