通过Selenium记录是否被Twitter封锁?
我在用selenium登录Twitter时,即使输入的账号密码是正确的,还是无法登录。虽然输入的账号密码被接受并验证了,但登录后却没有跳转到主页。
登录信息和主要代码:
email = 'twitter_email'
username = 'twitter_username'
password = 'twitter_password'
try:
login_button = wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, 'a[data-testid = loginButton]')))
login_button.click()
if driver.current_url == login_url:
print('Login Page')
else:
print(f'Still at {base_url}')
username_field = wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, 'input[autocomplete = username]')))
username_field.send_keys(username, Keys.RETURN)
print('Username is valid')
password_field = wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, 'input[type = password]')))
password_field.send_keys(password, Keys.RETURN)
print('Password is valid')
if wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, 'input[data-testid = ocfEnterTextTextInput]'))):
email_field = wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, 'input[data-testid = ocfEnterTextTextInput]')))
email_field.send_keys(email, Keys.RETURN)
print('Email verified')
else:
print('Email verification not required')
# wait.until(lambda driver: driver.current_url != login_url)
if driver.current_url == home_url:
print('Logged in successfully!')
else:
print(f"Login failed! Current page: {driver.current_url}")
except TimeoutException:
print('Login Failed due to timeout!')
输出:
Login Page
Username is valid
Password is valid
Email verified
Login failed! Current page: https://twitter.com/i/flow/login
即使成功登录,还是无法到达主页。
我已经把我的网址和Twitter的基础网址连接起来,因为Twitter的网址是根据用户的查询来生成的,有一定的规律。
base_url = 'https://twitter.com/'
login_element = 'i/flow/login'
home_element = 'home'
search_query = 'Random Query'
login_url = base_url + login_element
home_url = base_url + home_element
driver = gs.Chrome()
driver.get(base_url)
wait = WebDriverWait(driver, 30)
我没有找到Twitter主页上的任何元素,所以我检查了重定向,发现当前的网址和登录的网址不匹配,但出现了错误,所以我把那部分注释掉了,改用if else语句来检查驱动程序是否在主页。令我惊讶的是,即使用正确的账号密码登录,当前页面仍然显示的是登录页面。我觉得“current_url”显示的是我输入的内容,而不是实际的当前页面。
# wait.until(lambda driver: driver.current_url != login_url)
if driver.current_url == home_url:
print('Logged in successfully!')
else:
print(f"Login failed! Current page: {driver.current_url}")
所以我尝试从基础网址开始,最终到达登录网址。最后我得出结论,current_url是驱动程序当前所在的网址,而不是我提供的输入。
login_button = wait.until(ec.presence_of_element_located((By.CSS_SELECTOR, 'a[data-testid = loginButton]')))
login_button.click()
if driver.current_url == login_url:
print('Login Page')
else:
print('Still at base_url')
所以问题出在输入账号密码后,即使输入了正确的账号密码并按下回车键,驱动程序仍然停留在登录页面。我在代码中哪里做错了,导致无法登录Twitter呢?
1 个回答
0
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
username = 'username'
password = 'password'
# Function to login to Twitter
def login_to_twitter(username, password):
driver = webdriver.Chrome()
wait = WebDriverWait(driver, 10)
try:
# Load the login page
driver.get("https://twitter.com/login")
# Find the username input field and enter the username
username_input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'input[name="text"]')))
username_input.send_keys(username)
login_button = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '[role=button].r-13qz1uu')))
login_button.click()
password_input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'input[name="password"]')))
password_input.send_keys(password)
# Find and click the login button
login_button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, 'div[data-testid="LoginForm_Login_Button"]')))
login_button.click()
# Wait for the home page to load after successful login
home_url = 'https://twitter.com/home'
wait.until(EC.url_to_be(home_url))
print('Logged in successfully!')
except Exception as e:
print('Login Failed:', e)
finally:
driver.quit()
# Call the login function
login_to_twitter(username, password)
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。