如何去除不含硒的隐形动态元素?

时间:2019-06-24 21:11:18

标签: python selenium web-scraping scrapy python-requests

我正在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代码。不使用硒如何访问代码?任何帮助将不胜感激!

3 个答案:

答案 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 Nike⁠Plus 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')

enter image description here

答案 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的一些功能:

  • 并行处理多个网页;
  • 获取HTML结果和/或获取屏幕截图;
  • 关闭图像或使用Adblock Plus规则来加快渲染速度;
  • 在页面上下文中执行自定义JavaScript;
  • 编写Lua浏览脚本;
  • 在Splash-Jupyter Notebook中开发Splash Lua脚本。