Я работаю над имитацией входа в систему на 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. Как получить доступ к кодам без использования селена? Любая помощь будет оценена!

-1
pajarnas 25 Июн 2019 в 00:11

3 ответа

Лучший ответ

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

  • обрабатывать несколько веб-страниц параллельно;
  • получать результаты HTML и / или делать скриншоты;
  • отключите изображения или используйте правила Adblock Plus, чтобы ускорить рендеринг;
  • выполнить пользовательский JavaScript в контексте страницы;
  • писать сценарии просмотра Lua;
  • разрабатывать сценарии Splash Lua в тетрадях Splash-Jupyter.
0
pajarnas 26 Июн 2019 в 05:59

Может веббот? 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
ASH 25 Июн 2019 в 00:45

Используйте 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
KunduK 24 Июн 2019 в 23:36