我正在nike.com上进行模拟登录。登录内容是动态的,这意味着它在源代码中设置为不可见:
<div class="mex-unite-container hidden">
<div id="nike-unite-login-view" class="nike-unite" style="display:none"></div>
</div>
在分析源代码之后,我发现以下javascript源代码可能与问题有关:
if (mexUniteContainer && mexUniteContainer.classList.contains('hidden')) {
mexUniteContainer.classList.remove('hidden');
}
在执行javascript代码之前,将不会查看display:none
代码。不使用硒如何访问代码?任何帮助将不胜感激!
答案 0 :(得分:1)
使用WebdriverWait
并遵循xpath来访问登录表单。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver=webdriver.Chrome()
driver.get('https://www.nike.com/')
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,'//div[@id="AccountNavigationContainer"]//button//span[contains(.,"Join / Log In To NikePlus Account")]'))).click()
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,'//input[@placeholder="Email"]'))).send_keys('pajarnas')
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,'//input[@placeholder="Password"]'))).send_keys('pajarnas')
答案 1 :(得分:1)
也许是网络机器人? Webbot甚至可以处理具有动态更改的ID和类名的网页,并且其方法和功能比硒或机械化要多。
这是一个代码段:)
from webbot import Browser
web = Browser()
web.go_to('google.com')
web.click('Sign in')
web.type('mymail@gmail.com' , into='Email')
web.click('NEXT' , tag='span')
web.type('mypassword' , into='Password' , id='passwordFieldId') # specific selection
web.click('NEXT' , tag='span') # you are logged in ^_^
或者,使其保持简单。
import requests
url = 'http://example.com/userinfo.php'
values = {'username': 'user',
'password': 'pass'}
r = requests.post(url, data=values)
print r.content
答案 2 :(得分:0)
SplashJS为我工作。 Splash是一种javascript渲染服务。这是一个带有HTTP API的轻型网络浏览器,使用Twisted和QT5在Python 3中实现。 (扭曲的)QT反应器用于使服务完全异步,从而允许通过QT主循环利用Webkit并发性。 Splash的一些功能: