通过Selenium记录是否被Twitter封锁?

0 投票
1 回答
50 浏览
提问于 2025-04-13 14:08

我在用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)

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得简单易懂。

撰写回答