使用selenium和webdriver(chrome)python OSX在Instagram中填写登录表单

问题描述 投票:0回答:5

我想使用selenium登录到instagram,但我似乎无法在字段中输入值。

这是我的脚本:

#go to this address
browser.get('https://www.instagram.com')

#sleep for 1 seconds
sleep(1)

#find the 'login' button on homepage
login_elem = browser.find_element_by_xpath(
'//*[@id="react-root"]/section/main/article/div[2]/div[2]/p/a')

#navigate to login page
login_elem.click()

从这里开始遇到麻烦:

#locate the username field within the form
unform = browser.find_element_by_xpath(
'//*[@id="f3b8e6724a27994"]')

#clear the field
textunform.clear()

#enter 'test' into field
unform.send_keys('test')
python selenium selenium-webdriver instagram selenium-chromedriver
5个回答
1
投票

Instagram正在应用一些方法来保留动态id,xpath和css,每次在页面上重新加载时,属性会更改其值,更难以点击或设置值:

enter image description here


1
投票

Instagram上的用户名字段是ReactJS,所以你必须诱导WebDriverWait,然后按如下方式调用send_keys()方法:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By

options = Options()
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
browser = webdriver.Chrome(chrome_options=options, executable_path=r'C:\path\to\chromedriver.exe')
browser.get('https://www.instagram.com')
login_elem = browser.find_element_by_xpath('//*[@id="react-root"]/section/main/article/div[2]/div[2]/p/a')
login_elem.click()
WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input[name='username']"))).send_keys("anon")

浏览器截图:

BrowserScreenshot


0
投票

尝试选择该字段

unform = browser.find_element_by_xpath("//input[@name='username']")
unform.send_keys(<username>)

并为密码

browser.find_element_by_xpath("//input[@name='password']")

0
投票

我解决了它:

#Locate the username field
unform = browser.find_element_by_name("username")
#Locate the password field
pwform = browser.find_element_by_name('password')

ActionChains(browser)\
    .move_to_element(unform).click()\
    .send_keys('test')\
    .move_to_element(pwform).click()\
    .send_keys('test')\
    .perform()

#Locate login button
login_button = browser.find_element_by_xpath(
'//*[@id="react-root"]/section/main/article/div[2]/div[1]/div/form/span/button')

#Click login button
login_button.click()

0
投票

在这种情况下,恕我直言,最好使用这个:browser.find_element_by_name("Bermil18") / browser.find_element_by_name("1q56y3w5t9k0p3es8i1q")


0
投票

这是我在Instagram上登录的解决方案

def login(self, username, password):
    """ Methods that log in to Instagram by taking user's credentials as parameters"""
    self.driver.get("https://www.instagram.com/accounts/login/")
    try:            
        self.driver.find_element_by_xpath("//input[@name=\"username\"]").send_keys(username) # filling username
        self.driver.find_element_by_xpath("//input[@name=\"password\"]").send_keys(password) # filling password
        self.driver.find_element_by_xpath("//button[@type=\"submit\"]").click()              # submit form
    except NoSuchElementException:
        print("Failed to log in: Unable to locate Username/Password/LogIn element(s)")

    # If login is unsuccessful, Instagram will show a message "Sorry, your password was incorrect. Please double-check your password."
    success = self.driver.find_elements_by_xpath("//p[@id = \"slfErrorAlert\"]")
    if len(success) == 0:
        print("Login successful!")
    else: 
        print("Sorry, sign in unsuccessful. Please double-check your credentials.")

请参阅我的Github回购更多信息:https://github.com/mlej8/InstagramBot

© www.soinside.com 2019 - 2024. All rights reserved.