我遇到麻烦了,因为我试过的所有东西都不起作用。我尝试过使用python请求。不幸的是,这不起作用,因为表单是在网页后1秒左右加载的,这使得post请求变得不可能。我很不情愿地换成了selenium。但是,我不能通过xpath、id或class来定位元素,因为它们都是动态加载的,并且在每次加载网页时都是随机加载的。有没有其他可能注册的方式?
请求:当尝试传递post请求时。它失败是因为页面/表单尚未加载(请参阅标题中的URL )
m = {}
m["fullName"] = "test"
requests.post(url, data=m)
Selenium尝试:不起作用,因为ids/类名/等每次都是随机的。
email_field = driver.find_element_by_id("f2e3acfde5540d")
name_field = driver.find_element_by_id("f15a1d5523914b")
username_field = driver.find_element_by_id("ff9c874585158")
password_field = driver.find_element_by_id("f233cff115218c8")
发布于 2018-07-10 17:27:03
这里有一个例子,如何使用xpath选择器通过Selenium登录/注册instagram。我用更少的代码用selenium包装器Elementium编写了这段代码。但是,您可以对您的代码使用相同的选择器。
from elementium.drivers.se import SeElements
from selenium import webdriver
browser = webdriver.Chrome()
browser.get('https://www.instagram.com/accounts/login/?hl=en')
se = SeElements(browser)
se.xpath('//input[@name="username"]', wait=True, ttl=2).clear().write('username')
se.xpath('//input[@type="password"]', wait=True, ttl=2).clear().write('password')
se.xpath('//button[contains(text(), "Log in")]', wait=True, ttl=2).click()
assert se.xpath('//a[text()="Profile"]', wait=True, ttl=2), 'User was not logged in.'
注册时也是如此:
browser.get('https://www.instagram.com/?hl=en')
se = SeElements(browser)
se.xpath('//input[@name="emailOrPhone"]', wait=True, ttl=2).clear().write('366656')
se.xpath('//input[@name="fullName"]', wait=True, ttl=2).clear().write('Alex')
se.xpath('//input[@name="username"]', wait=True, ttl=2).clear().write('Alex')
se.xpath('//input[@name="password"]', wait=True, ttl=2).clear().write('password')
se.xpath('//button[contains(text(), "Sign up")]', wait=True, ttl=2).click()
https://stackoverflow.com/questions/51250461
复制相似问题