Instagram 上的硒 python
Selenium python on instagram
我正在尝试使用 selenium 在 Instagram 上进行一些网络抓取。具体来说,我正在尝试通过此地址登录
https://www.instagram.com/accounts/login/
含硒。
在这个页面,输入'username'是这样写的
<input class="_ph6vk _o716c" aria-describedby="" aria-label="Phone number, username, or email" aria-required="true" autocapitalize="off" autocorrect="off" maxlength="30" name="username" placeholder="Phone number, username, or email" value="" type="text">
我在 python 中所做的是:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
driver=webdriver.Firefox()
driver.get('https://www.instagram.com/accounts/login/')
input_username = driver.find_elements_by_xpath("//input[@name='username']")
input_username.send_keys("username")
Python returns 我: AttributeError: 'list' 对象没有属性 'send_keys'
所以我做了同样的改变:
input_username[0].send_keys("username")
错误是:
IndexError: 列表索引超出范围
所以,数组是空的。有人知道怎么解决吗?
试试这个代码:
from selenium import webdriver
import time
driver=webdriver.Firefox()
driver.get('https://www.instagram.com/accounts/login/')
time.sleep(2)
user_name=driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/article/div/div[1]/div/form/div[1]/div/input')
user_name.send_keys('user_name')
password=driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/article/div/div[1]/div/form/div[2]/div/input')
password.send_keys('pa$$')
driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/article/div/div[1]/div/form/span[1]/button').click()
在您的情况下,页面可能未加载表单,因此请使用 WebDriverWait
让元素加载并启动 scraping。
您可以用这种方式检查元素,而不是放置 time.sleep(2)
,因为它可能需要很长时间才能加载。
myElem = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.ID, 'IdOfMyElement')))
如果可能的话,也尝试使用api,scraping应该是第二种方法。
表单在页面加载后加载,我是这样做的:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Firefox()
driver.get("https://instagram.com")
time.sleep(4)
driver.find_element_by_name("username").send_keys("foobar")
driver.find_element_by_name("password").send_keys("pass")
driver.find_element_by_name("password").send_keys(Keys.ENTER)
最后有点hacky
我正在尝试使用 selenium 在 Instagram 上进行一些网络抓取。具体来说,我正在尝试通过此地址登录 https://www.instagram.com/accounts/login/ 含硒。
在这个页面,输入'username'是这样写的
<input class="_ph6vk _o716c" aria-describedby="" aria-label="Phone number, username, or email" aria-required="true" autocapitalize="off" autocorrect="off" maxlength="30" name="username" placeholder="Phone number, username, or email" value="" type="text">
我在 python 中所做的是:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.action_chains import ActionChains
driver=webdriver.Firefox()
driver.get('https://www.instagram.com/accounts/login/')
input_username = driver.find_elements_by_xpath("//input[@name='username']")
input_username.send_keys("username")
Python returns 我: AttributeError: 'list' 对象没有属性 'send_keys'
所以我做了同样的改变:
input_username[0].send_keys("username")
错误是:
IndexError: 列表索引超出范围
所以,数组是空的。有人知道怎么解决吗?
试试这个代码:
from selenium import webdriver
import time
driver=webdriver.Firefox()
driver.get('https://www.instagram.com/accounts/login/')
time.sleep(2)
user_name=driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/article/div/div[1]/div/form/div[1]/div/input')
user_name.send_keys('user_name')
password=driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/article/div/div[1]/div/form/div[2]/div/input')
password.send_keys('pa$$')
driver.find_element_by_xpath('//*[@id="react-root"]/section/main/div/article/div/div[1]/div/form/span[1]/button').click()
在您的情况下,页面可能未加载表单,因此请使用 WebDriverWait
让元素加载并启动 scraping。
您可以用这种方式检查元素,而不是放置 time.sleep(2)
,因为它可能需要很长时间才能加载。
myElem = WebDriverWait(driver, delay).until(EC.presence_of_element_located((By.ID, 'IdOfMyElement')))
如果可能的话,也尝试使用api,scraping应该是第二种方法。
表单在页面加载后加载,我是这样做的:
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
driver = webdriver.Firefox()
driver.get("https://instagram.com")
time.sleep(4)
driver.find_element_by_name("username").send_keys("foobar")
driver.find_element_by_name("password").send_keys("pass")
driver.find_element_by_name("password").send_keys(Keys.ENTER)
最后有点hacky