使用 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()
- 我的部分代码可以登录,但我希望能够使用 xpath 查找元素,为此我可以在不同情况下应用它。如果有人可以让我知道我可以在 instagram 页面上的 HTML 中查找我正在寻找的内容,或者指导我阅读任何有用的阅读材料,我将非常感激!我已经尝试了几种方法来做到这一点。
这是我的代码。我还添加了我的代码和错误消息的照片。
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 in
在 div 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
submit
的 button
标签下的 div
标签中。你也可以使用这个 xpath。
browser.find_element_by_xpath("//button[@type='submit']").click()
我是一名编码新手。尝试创建一个 instagram 机器人,我正在按照此处的说明进行操作:(https://realpython.com/instagram-bot-python-instapy/)
我可以填写用户名和密码的元素,但我无法单击登录 link。使用 -
#submit = browser.find_element_by_tag_name('form')
#submit.submit()
- 我的部分代码可以登录,但我希望能够使用 xpath 查找元素,为此我可以在不同情况下应用它。如果有人可以让我知道我可以在 instagram 页面上的 HTML 中查找我正在寻找的内容,或者指导我阅读任何有用的阅读材料,我将非常感激!我已经尝试了几种方法来做到这一点。
这是我的代码。我还添加了我的代码和错误消息的照片。
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 in
在 div 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
submit
的 button
标签下的 div
标签中。你也可以使用这个 xpath。
browser.find_element_by_xpath("//button[@type='submit']").click()