Как утилизировать невидимые динамические элементы без селена? - PullRequest
0 голосов
/ 25 июня 2019

Я работаю над имитацией входа в систему 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');
    }

Коды display:none не будут просматриваться до выполнения кодов JavaScript. Как получить доступ к кодам без использования селена? Любая помощь будет оценена!

Ответы [ 3 ]

1 голос
/ 25 июня 2019

Может веббот? webbot даже работает с веб-страницами, которые имеют динамически изменяющиеся идентификаторы и имена классов и имеют больше методов и возможностей, чем селен или механизация.

Вот фрагмент:)

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
1 голос
/ 25 июня 2019

Используйте 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

0 голосов
/ 26 июня 2019

SplashJS работает на меня.Splash - это сервис рендеринга JavaScript.Это легкий веб-браузер с HTTP API, реализованный в Python 3 с использованием Twisted и QT5.(Скрученный) реактор QT используется для того, чтобы сделать сервис полностью асинхронным, позволяя использовать преимущества параллелизма WebKit через основной цикл QT.Некоторые из функций Splash:

  • параллельная обработка нескольких веб-страниц;
  • получить результаты HTML и / или сделать скриншоты;
  • отключите изображения или используйте правила Adblock Plus, чтобы ускорить рендеринг;
  • выполнить пользовательский JavaScript в контексте страницы;
  • написать сценарии просмотра Lua;
  • разработка сценариев Splash Lua в тетрадях Splash-Jupyter.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...