如何在没有硒的情况下刮去看不见的动态元素?

2024-06-16 11:34:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在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代码。如何在不使用selenium的情况下访问代码?任何帮助都将不胜感激


Tags: 代码divcomnone内容源代码display动态
3条回答

使用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

也许是韦伯?webbot甚至可以处理具有动态变化的id和类名的网页,并且比selenium或mechanize具有更多的方法和功能

这里有一个片段:)

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

SplashJS适合我。 Splash是一个javascript呈现服务。它是一个带有HTTP API的轻量级web浏览器,在Python3中使用Twisted和QT5实现。(twisted)QT reactor用于使服务完全异步,从而允许通过QT主循环利用webkit并发性。一些飞溅功能:

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

相关问题 更多 >