使用 selenium 登录 instagram

Log in to instagram using selenium

我是一名编码新手。尝试创建一个 instagram 机器人,我正在按照此处的说明进行操作:(https://realpython.com/instagram-bot-python-instapy/)

我可以填写用户名和密码的元素,但我无法单击登录 link。使用 -

#submit = browser.find_element_by_tag_name('form')
#submit.submit()

这是我的代码。我还添加了我的代码和错误消息的照片。

from time import sleep
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

#sets browser to firefox - need to make sure that geckodriver and firefox are in the path
browser = webdriver.Firefox()

#opens firefox to instagram#
browser.get('https://www.instagram.com/accounts/login/?source=auth_switcher')


#tells selenium to wait 5 seconds before trying again if it can't find something
browser.implicitly_wait(10)

print ('i waited')


user = 'username'
password = 'password'


##### USERNAME #####
username = browser.find_element_by_xpath("//input[@name='username']")
username.send_keys(user)

#username = browser.find_element_by_name('username')
#username.send_keys(user)

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

#password = browser.find_element_by_name('password')
#password.send_keys(password)

browser.implicitly_wait(10)

##### LOG IN #####

#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 = browser.find_element_by_tag_name('form')
#submit.submit()

#login_link = browser.find_element_by_xpath("//article/div/div/p/a[text()='Log in']")

login_link = browser.find_element_by_xpath("//a[text()='Log in']")
login_link.click()


#login_form = browser.find_element_by_xpath("//form[@id='loginForm']")
#form.submit()



print ('login incomplete :)')


sleep(5)

browser.quit()  #quits geckodriver and mozilla

print ('closed')

Picture of error

code part 1

code part 2

你的 xpath 有点不对。您正在使用

//a[text()='Log in']

但是 Log indiv tag 里面,而不是 a tag

请使用这个xpath

//div[text()='Log In']/..

在你的代码中

login_link = browser.find_element_by_xpath("//div[text()='Log In']/..")
login_link.click()

HTML是

<div class="            qF0y9          Igw0E     IwRSH      eGOV_         _4EzTm                                                                                                              ">Log In</div>

我们使用 text() 定位文本登录,然后我们使用 /.. 寻找按钮,它是一个父节点。

替换这个link

login_link = browser.find_element_by_xpath("//a[text()='Log in']")

login_link = browser.find_element_by_xpath("//div[contains(text(),'Log In')]")

而且你应该很好。由于 Login In 按钮包裹在 div 元素内,而不是 a 元素内。

如前所述,Log In 位于带有 type submitbutton 标签下的 div 标签中。你也可以使用这个 xpath。

browser.find_element_by_xpath("//button[@type='submit']").click()