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

使用selenium和webdriver(chrome)python OSX在Instagram中填写登录表单,python,selenium,selenium-webdriver,instagram,selenium-chromedriver,Python,Selenium,Selenium Webdriver,Instagram,Selenium Chromedriver,我想使用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/

我想使用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')

请尝试使用以下命令选择字段:

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

请尝试使用以下命令选择字段:

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

Instagram上的用户名字段是一个默认字段,因此您必须引导WebDriverWait,然后调用
发送密钥()
方法,如下所示:

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")
浏览器屏幕截图:


Instagram上的用户名字段是一个默认字段,因此您必须引导WebDriverWait,然后调用
发送密钥()
方法,如下所示:

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")
浏览器屏幕截图:

我解决了这个问题:

#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()
我解决了它:

#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()

instagram正在应用某种方法保留动态id、xpath和css,每次重新加载页面时,属性都会更改其值,这使得单击或设置值更加困难:


instagram正在应用某种方法保留动态id、xpath和css,每次重新加载页面时,属性都会更改其值,这使得单击或设置值更加困难:


在这种情况下,我觉得最好使用这种:
浏览器。按名称查找元素(“Bermil18”)
/
浏览器。按名称查找元素(“1q56y3w5t9k0p3es8i1q”)
在这种情况下,我觉得最好使用这种:
浏览器。按名称查找元素(“Bermil18”)
/
浏览器。按名称查找元素(“1q56y3w3p3es9iq”)

这是我在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 repo:

这是我在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.")

查看my Github repo以了解更多信息:

这其中有一个技巧,与其搜索按钮(登录),还有一个更好的方法不用它登录。怎样?让我们看看:

导入所需的软件包:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep
#Select the driver, In our case we will use Chrome.
chromedriver_path = 'chromedriver.exe' # Change this to your own chromedriver path!
webdriver = webdriver.Chrome(executable_path=chromedriver_path)
sleep(2)
webdriver.get('https://www.instagram.com/accounts/login/?source=auth_switcher')
sleep(3)
username = webdriver.find_element_by_name('username')
username.send_keys('yourUsername')
password = webdriver.find_element_by_name('password')
password.send_keys('yourPassword')
#instead of searching for the Button (Log In) you can simply press enter when you already selected the password or the username input element.
submit = webdriver.find_element_by_tag_name('form')
submit.submit()
您可以复制代码并直接运行它(即使没有真正的用户名或密码)
要从

获取webdriver(chromedriver.exe),这里有一个技巧,与其搜索按钮(登录),还有一个更好的方法不用它登录。怎样?让我们看看:

导入所需的软件包:

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from time import sleep
#Select the driver, In our case we will use Chrome.
chromedriver_path = 'chromedriver.exe' # Change this to your own chromedriver path!
webdriver = webdriver.Chrome(executable_path=chromedriver_path)
sleep(2)
webdriver.get('https://www.instagram.com/accounts/login/?source=auth_switcher')
sleep(3)
username = webdriver.find_element_by_name('username')
username.send_keys('yourUsername')
password = webdriver.find_element_by_name('password')
password.send_keys('yourPassword')
#instead of searching for the Button (Log In) you can simply press enter when you already selected the password or the username input element.
submit = webdriver.find_element_by_tag_name('form')
submit.submit()
您可以复制代码并直接运行它(即使没有真正的用户名或密码) 要从def登录(用户名、密码)获取Web驱动程序(chromedriver.exe):

基本url是intagram url。 我制作了一个instabot,您可以在下面的github链接中找到登录、跟踪、取消跟踪、查看最近一天的帖子等的代码。 def登录(用户名、密码):

基本url是intagram url。 我制作了一个instabot,您可以在下面的github链接中找到登录、跟踪、取消跟踪、查看最近一天的帖子等的代码。

你到底遇到了什么麻烦?你到底遇到了什么麻烦?在这种情况下,我认为最好使用
浏览器。通过名称(“用户名”)查找元素。如果在输入标记之外有任何其他名称属性可能不太准确,则通过名称(“密码”)查找元素。
,现在我的状态很好。但仍然无法在字段中输入任何文本。Thankstill似乎无法输入任何文本。。。。任何异常或输入字段为空?输入字段为空。光标开始在字段内闪烁,但.send_keys()方法不起作用。在这种情况下,最好使用
浏览器。按名称(“用户名”)查找元素。如果输入标记之外有任何其他名称属性可能不太准确,则按名称(“密码”)查找元素。这样更好,现在我的状态很好。但仍然无法在字段中输入任何文本。Thankstill似乎无法输入任何文本。。。。任何异常或输入字段为空?输入字段为空。光标开始在字段内闪烁,但.send_keys()方法不起作用。
submit=webdriver。通过标记名称(“表单”)查找元素\u
然后
submit.submit()
这将解决问题检查此答案:
submit=webdriver。通过标记名称(“表单”)查找元素\u
然后
submit.submit()
这将解决问题检查此答案: