繁体   English   中英

selenium.common.exceptions.TimeoutException:消息:

[英]selenium.common.exceptions.TimeoutException: Message:

我已经查看了描述该问题的线程,但无法提出解决方案,因为已经存在的答案很旧,并且似乎与实际问题无关。 我正在尝试使用 Selenium WebDriver 设置 Python 脚本,这将允许我使用 Telegram Web 在我的 Telegram 帐户上自动执行操作。

注意:您无需拥有 Telegram 帐户即可查看问题发生的位置。

我要做什么:脚本要求您输入国家代码和电话号码。 然后它应该将此信息填充到网页上的输入框中。 到目前为止,该脚本设法将国家代码解析到正确的输入框并将其放置得很好。 但是在将电话号码放入输入框中时,我得到了 selenium.common.exceptions.TimeoutException 错误。 我不明白为什么。

这是我的代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
from time import sleep
from platform import system
from os import getcwd, getlogin, getenv

cwd = getcwd()
os = system()
user = getlogin()
appdata = getenv('APPDATA')

country_code = input("Phone number country code: ")
phone_number = input("Phone number: ")

    if os == "Linux":
        if user == "root":
            print(
                "You are executing the script as root. Make sure that the Firefox profile folder is also located in the root directory.")
        driver = webdriver.Firefox(executable_path=cwd + "/geckodriver",
                                   firefox_profile="/home/" + user + "/.mozilla/firefox/kqskr2vn.default-esr")
    elif os == "Windows":
        driver = webdriver.Firefox(executable_path=cwd + "\\geckodriver.exe",
                                   firefox_profile=appdata + "\\Mozilla\\Firefox\\Profiles\\f4ymhsbu.default-esr-1")
    # elif os == "Darwin":
    
    page_number = 1
    wait = WebDriverWait(driver, 10)
    driver.get("https://web.telegram.org/#/login")
    
    wait.until(
        ec.presence_of_element_located((By.CSS_SELECTOR, "input.md-input.ng-pristine.ng-valid.ng-not-empty.ng-touched")))
    cc_ID = "input.md-input.ng-pristine.ng-valid.ng-not-empty.ng-touched"
    driver.find_element_by_css_selector(cc_ID).click()
    driver.find_element_by_css_selector(cc_ID).send_keys(Keys.CONTROL + "a")
    driver.find_element_by_css_selector(cc_ID).send_keys(Keys.BACKSPACE + country_code)
    sleep(5)
    wait.until(ec.presence_of_element_located(
        (By.CSS_SELECTOR, "input.md-input.ng-pristine.ng-untouched.ng-empty.ng-invalid.ng-invalid-required")))
    pn_ID = "input.md-input.ng-pristine.ng-untouched.ng-empty.ng-invalid.ng-invalid-required"
    driver.find_element_by_css_selector(pn_ID).click()
    driver.find_element_by_css_selector(pn_ID).send_keys(phone_number)

我试过的:

我检查了我是否没有使用“ec.presence_of_element_located”方法,而网页将包含相同类型和 class 下的多个元素。 与此相关的某些错误,您必须使用“presence_of_all_elements_located”或指定您尝试访问的错误,可能使用:nth-of-type/child 选择器。 此 CSS 选择器仅在页面上出现一次,因此这似乎不会导致问题。

我已经使用“wait.until”方法检查了元素是否存在,并且出于纯粹的绝望还尝试使用“sleep(x)”。 这并没有解决问题,它还应该产生一个不同的异常“没有这样的元素”。

由于没有 WebDriver 错误并且浏览器打开得很好,这让我相信不存在与不正确的 WebDriver 路径或任何此类情况相关的任何问题。

我不知道是什么导致了这个问题,所以如果你知道,请随时纠正我的错误! 感谢任何人!

首先,我英语说得不好。 对此我很抱歉。

此部分出现错误。 我猜这个错误是由于 class..

wait.until(ec.presence_of_element_located(
        (By.CSS_SELECTOR, "input.md-input.ng-pristine.ng-untouched.ng-empty.ng-invalid.ng-invalid-required")))

可以这样试试吗。。

wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, "input.ng-pristine.ng-empty.ng-invalid.ng-invalid-required.ng-touched")))
pn_ID = "input.ng-pristine.ng-empty.ng-invalid.ng-invalid-required.ng-touched"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM