我一直在嘗試讓 Python 登錄網站并下載一個 csv 檔案(一個接一個,因為它們可能需要很長時間,而且無法并行下載)。由于 ElementClickInterceptedException,我無法單擊 SENECA01 按鈕,因此在閱讀 stackoverflow 后,我嘗試使用顯式等待。
這是錯誤:
AttributeError: module 'selenium.webdriver' has no attribute 'find_element'
這是代碼:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from getpass import getpass
from selenium.webdriver.common.by import By
import time
opt = Options()
opt.add_argument("--disable-infobars")
opt.add_argument("start-maximized")
opt.add_argument("--disable-extensions")
# Pass the argument 1 to allow and 2 to block
opt.add_experimental_option("prefs", { \
"profile.default_content_setting_values.media_stream_mic": 1,
"profile.default_content_setting_values.media_stream_camera": 1,
"profile.default_content_setting_values.geolocation": 1,
"profile.default_content_setting_values.notifications": 1
})
PATH = ("C:\\Users\\me\\AppData\\Local\\Programs\\Python\\Python39\\chromedriver.exe")
driver = webdriver.Chrome(PATH, chrome_options=opt)
wait = WebDriverWait(webdriver, 5)
driver.get("https://xxxx.xxx-xxx.org/logon/login")
print(driver.title)
username = input("Enter in your username: ")
password = getpass("Enter your password: ")
username_textbox = driver.find_element_by_id("username")
username_textbox.send_keys(username)
password_textbox = driver.find_element_by_id("password")
password_textbox.send_keys(password)
login_button = driver.find_element_by_class_name("formstylebut")
login_button.submit()
link = driver.find_element_by_link_text("Big Data (CAD)")
link.click()
link = driver.find_element_by_link_text("Run a Report")
link.click()
link = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "SENECA01")))
link = driver.find_element_by_link_text("SENECA01")
link.click()
uj5u.com熱心網友回復:
要首先開始使用 Selenium,您需要:
from selenium import webdriver
此外,根據檔案,WebDriverWait定義如下:
class selenium.webdriver.support.wait.WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
其中建構式采用 WebDriver 實體并以秒為單位超時。
由于您的 webdriver 實體是:
driver = webdriver.Chrome(PATH, chrome_options=opt)
因此,webdriver您不需要將相同的driver實體傳遞給WebDriverWait(),如下所示:
wait = WebDriverWait(driver, 5)
uj5u.com熱心網友回復:
這個
wait = WebDriverWait(webdriver, 5)
應該
wait = WebDriverWait(driver, 5)
這就是你應該如何使用它
link = wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "SENECA01")))
相信它有幫助!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/362309.html
上一篇:org.openqa.selenium.NoSuchElementException導航到子divSeleniumJava時
