我正在嘗試制作一個自動登錄的 twitter 機器人。但是當我嘗試將send_keys 發送到密碼欄位時,我不能。(只有密碼欄位不起作用,send_keys 到 username 和 phone_number 的類似代碼有效)。
錯誤訊息:“selenium.common.exceptions.ElementNotInteractableException:訊息:元素不可互動”。
所以我嘗試改用execute_script。
driver.execute_script("arguments[0].value=arguments[1];", password_input, TWITTER_PASSWORD)
上面的行也有效。但我不知道如何將 Enter 鍵發送到 arguments[0]
driver.execute_script("arguments[0].submit();", password_input)
試過這個但不起作用。(如果這行完全錯誤,請原諒我,因為看起來這個方法需要 JS 代碼,而我不知道 JS)
請幫我解決一下這個。對此問題的任何幫助或我的一般代碼將不勝感激。
""" 如果要測驗代碼,記得給 TWITTER_EMAIL、TWITTER_PHONE_NUMBER 和 TWITTER_PASSWORD 賦值。"""
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
TWITTER_EMAIL =
TWITTER_PHONE_NUMBER =
TWITTER_PASSWORD =
URL = r"https://twitter.com/i/flow/login"
s = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=s)
driver.get(url=URL)
def twitter_auto_login():
time.sleep(10)
username_input = driver.find_element(By.CSS_SELECTOR, "input")
username_input.send_keys(TWITTER_EMAIL)
time.sleep(2)
username_input.send_keys(Keys.ENTER)
time.sleep(5)
phone_num_input = driver.find_element(By.CSS_SELECTOR, "input")
phone_num_input.send_keys(TWITTER_PHONE_NUMBER)
time.sleep(2)
phone_num_input.send_keys(Keys.ENTER)
time.sleep(5)
password_input = driver.find_element(By.CSS_SELECTOR, "input")
# driver.execute_script("arguments[0].click();", password_input)
driver.execute_script("arguments[0].value=arguments[1];", password_input, TWITTER_PASSWORD)
# https://stackoverflow.com/questions/52273298/what-is-arguments0-while-invoking-execute-script-method-through-webdriver-in
time.sleep(2)
driver.execute_script("arguments[0].submit();", password_input)
uj5u.com熱心網友回復:
無需使用 driver.execute_script。在您的情況下,您只是以錯誤的方式定位元素。你應該這樣做:
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
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
TWITTER_EMAIL = "[email protected]"
TWITTER_PASSWORD = "lalala"
URL = r"https://twitter.com/i/flow/login"
s = Service(ChromeDriverManager().install())
driver = webdriver.Chrome(service=s)
driver.get(url=URL)
def twitter_auto_login():
username_input = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//input[@autocomplete='username']")))
username_input.send_keys(TWITTER_EMAIL)
username_input.send_keys(Keys.ENTER)
password_input = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//input[@autocomplete='current-password']")))
password_input.send_keys(TWITTER_PASSWORD)
password_input.send_keys(Keys.ENTER)
twitter_auto_login()
請注意,我使用的顯式等待比隱式等待要好得多(這會讓你浪費大量時間毫無意義)。
uj5u.com熱心網友回復:
通過 JQuery,您可以使用以下 Javascript 來模擬enter事件:
driver.execute_script("var script = document.createElement('script');
script.src = 'https://code.jquery.com/jquery-3.6.0.min.js';
var e = $.Event( 'keypress', { which: 13 } );
arguments[0].trigger(e);", password_input)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/503791.html
標籤:javascript Python 硒
