selenium.common.exceptions.TimeoutException:消息:
selenium.common.exceptions.TimeoutException: Message:
我已经研究过描述该问题的线程,但无法提出解决方案,因为现有的答案已经过时,而且似乎与实际问题根本无关。我正在尝试使用 Selenium WebDriver 设置一个 Python 脚本,这将允许我使用 Telegram Web 自动对我的 Telegram 帐户执行操作。
注意:您无需拥有 Telegram 帐户即可查看问题所在。
我想做什么:脚本要求您提供国家代码和 phone 号码。然后它应该将这些信息填入网页上的输入框。到目前为止,脚本设法将国家代码解析到正确的输入框并将其放置得很好。但是当涉及到将 phone 数字放入输入框时,我得到了 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"
我已经研究过描述该问题的线程,但无法提出解决方案,因为现有的答案已经过时,而且似乎与实际问题根本无关。我正在尝试使用 Selenium WebDriver 设置一个 Python 脚本,这将允许我使用 Telegram Web 自动对我的 Telegram 帐户执行操作。
注意:您无需拥有 Telegram 帐户即可查看问题所在。
我想做什么:脚本要求您提供国家代码和 phone 号码。然后它应该将这些信息填入网页上的输入框。到目前为止,脚本设法将国家代码解析到正确的输入框并将其放置得很好。但是当涉及到将 phone 数字放入输入框时,我得到了 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"