我撰寫了一個 Python 腳本,它登錄到我的電子郵件帳戶并自動發送一些訊息。
在測驗了有效的代碼之后,我想簡化它(添加單行,減少區域變數的數量......)。更改后它沒有像我預期的那樣作業。完整的錯誤資訊是:
<bound method WebElement.click of
<selenium.webdriver.firefox.webelement.FirefoxWebElement (session="fa50a977-d210-
4c7f-a836-080014cb9209", element="2548584a-e638-47fd-b40b-615516d0e9c6")>>
我只是將我的腳本的開頭發布到第一個錯誤發生的地方。當我了解如何避免第一個錯誤時,我可以修復其余代碼。
我的代碼開頭的這段代碼片段有效:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
browser = webdriver.Firefox()
browser.get('https://protonmail.com/')
loginButton = WebDriverWait(browser, 10).until(EC.presence_of_element_located((By.CSS_SELECTOR, "a.btn-ghost:nth-child(1)")))
loginButton.click()
我將其更改為以下不起作用的代碼:
browser = webdriver.Firefox()
browser.get('https://protonmail.com/')
wait = WebDriverWait(browser, 10)
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "a.btn-ghost:nth-child(1)"))).click()
顯然,我在這里違反了一些基本的 Python 編程規則。誰能向我解釋一下,第二個代碼片段有什么問題以及為什么會發生這種型別的錯誤?
uj5u.com熱心網友回復:
正如pcalkins在評論中提到的,這是一個錯字。
您正在使用.click方法而不是.click()方法。
所以而不是
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "a.btn-ghost:nth-child(1)"))).click
它應該是
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "a.btn-ghost:nth-child(1)"))).click()
我想建議您visibility_of_element_located每次都使用預期條件這將是相關的,而不是presence_of_element_located. 由于presence_of_element_located可能會在尚未完全加載的情況下回傳一個元素,因此僅存在于頁面上,而visibility_of_element_located當它已經可見、可點擊等時,將等待更成熟的元素狀態的元素可見性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/421986.html
標籤:
