[英]Filling in login forms in Instagram using selenium and webdriver (chrome) python OSX
我想使用 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')
这有一个技巧,而不是搜索按钮(登录),有一种更好的方法可以不用它来登录。 如何? 让我们来看看:
导入你需要的包:
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()
您可以复制代码并直接运行(即使没有真实的用户名或密码) 从ChromeDriver获取 webdriver (chromedriver.exe)
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")
浏览器截图:
我解决了:
#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()
在这种情况下恕我直言最好使用这个: browser.find_element_by_name("Bermil18")
/ browser.find_element_by_name("1q56y3w5t9k0p3es8i1q")
这是我在 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
定义登录(用户名,密码):
driver.get(base_url)
time.sleep(3)
detail = driver.find_elements_by_class_name('_2hvTZ')
detail[0].clear()
detail[1].clear()
detail[0].send_keys(username)
detail[1].send_keys(password)
driver.find_element_by_class_name('L3NKy').click()
time.sleep(3)
for i in driver.find_elements_by_tag_name('button'):
if i.text=='Not Now':
i.click()
break
time.sleep(3)
driver.find_element_by_class_name('HoLwm').click()
基本 url 是 intagram url 。 我制作了一个 instabot,您可以在以下 github 链接中找到登录、关注、取消关注、查看最近的帖子等代码。 https://github.com/Devanshchowdhury2212/Instagram-Web-scraping-
这对我有用:
def login(self, username):
self.driver = webdriver.Chrome()
self.driver.get('https://www.instagram.com/')
sleep(1)
username_input = self.driver.find_element_by_xpath(
"//input[@name='username']")
username_input.send_keys(username)
password_input = self.driver.find_element_by_xpath(
"//input[@name='password']")
password_input.send_keys(pw)
submit_btn = self.driver.find_element_by_xpath(
"//button[@type='submit']")
submit_btn.click()
sleep(2)
save_your_login_info_not_now = self.driver.find_element_by_xpath("/html/body/div[1]/section/main/div/div/div/div/button")
save_your_login_info_not_now.click()
您会注意到我发送的是变量 pw 而不是我的实际密码。 这是出于安全原因。 创建一个名为 secrets.py 的新文件,并在其中按以下格式声明您的密码:
pw = '*********'
尝试选择字段
unform = browser.find_element_by_xpath("//input[@name='username']")
unform.send_keys(<username>)
和密码
browser.find_element_by_xpath("//input[@name='password']")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.