Очистка веб-сайта с использованием входов Selenium и BeautifulSoup? - PullRequest
1 голос
/ 08 января 2020

Я пытаюсь очистить западный союз, отправляющий деньги -Веб-сайт, чтобы получить текущий курс евро-синий с аргентинским песо. Western Union - единственная компания, которая дает вам истинный курс обмена, который также торгуется на улицах. Посмотрите на Dollar-Blue, если вас интересует, как появился второй рынок для торговли валютами в Аргентине.

Моя цель - получить текущий курс евро к аргентинскому песо. Если кто-то заходит на сайт, вы должны сначала нажать кнопку «Принять», затем ввести название страны, в которую вы хотите отправить деньги, и только после этого шага вы сможете увидеть курс обмена.

Сначала я пытался сделать это с запросами, поскольку он не обрабатывает java -скрипт. Я переключился на селен и сейчас довольно близок.

Мой код выглядит следующим образом:

import time
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup

WesternUnion = 'https://www.westernunion.com/de/en/web/send-money'

# create a new Chrome session
driver = webdriver.Chrome()
driver.implicitly_wait(30)
driver.get(WesternUnion)

python_button = driver.find_element_by_id('button-fraud-warning-accept')
python_button.click()

time.sleep(0.25)
python_button = driver.find_element_by_id('country')
python_button.click() #click fhsu link
time.sleep(0.15)
text_area = driver.find_element_by_id('country')
text_area.send_keys("Argentina")

soup = BeautifulSoup(driver.page_source, 'lxml')

div = soup.find('div', id="OptimusApp")
div2 = soup.find('div', class_="text-center")

Проблема в том, что он не показывает обменный курс, если я делаю это с python ( скриншот навигации с автоматом c с python), тогда как он показывает обмен Оцените, если я делаю то же самое вручную ( скриншот, навигация вручную ).

Я новичок в чистке и python, есть ли у кого-нибудь простое решение этой проблемы?

1 Ответ

1 голос
/ 08 января 2020

Я немного изменил ваш код, добавив пару необязательных аргументов, и при выполнении я получил следующий результат:

  • Блок кода:

    from selenium import webdriver
    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
    options = webdriver.ChromeOptions() 
    options.add_argument("start-maximized")
    options.add_experimental_option("excludeSwitches", ["enable-automation"])
    options.add_experimental_option('useAutomationExtension', False)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
    driver.get('https://www.westernunion.com/de/en/web/send-money')
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button#button-fraud-warning-accept"))).click()
    python_button = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#country")))
    python_button.click()
    python_button.send_keys("Argentina")
    print(WebDriverWait(driver, 5).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "span#smoExchangeRate"))).text)
    
  • Вывод на консоль:

    1.00 EUR = Argentine Peso (ARS)
    
  • Наблюдение: Мое наблюдение было похоже на ваше, что обменный курс не показывался:

snapshot


Глубокое погружение

Осматривая DOM Tree веб-страницы, вы обнаружите, что некоторые из * 1029 Тег * и <link> относится к JavaScripts с ключевым словом dist . В качестве примера:

  • <script src="/content/wucom/dist/2.7.1.8f57d9b1/js/smo-configs/smo-config.de.js"></script>
  • <link rel="stylesheet" type="text/css" href="/content/wucom/dist/2.7.1.8f57d9b1/css/responsive_css.min.css">
  • <link rel="stylesheet" href="https://nebula-cdn.kampyle.com/resources/dist/assets/css/liveform-web-vendor-f84dfc85d6.css">
  • <link rel="stylesheet" href="https://nebula-cdn.kampyle.com/resources/dist/assets/css/kampyle/liveform-web-style-a4ce961d15.css">
  • <script src="https://nebula-cdn.kampyle.com/resources/dist/assets/js/liveform-web-vendor-919a2c71c3.js"></script>
  • <script src="https://nebula-cdn.kampyle.com/resources/dist/assets/js/liveform-web-app-2c4e3adeb6.js"></script>

Что является четким свидетельством того, что сайт защищен Bot Management поставщиком услуг Distil Networks и навигация по ChromeDriver обнаруживается и впоследствии блокируется .


Distil

Согласно статье В Distil.it действительно что-то есть ... :

Distil защищает сайты от автоматических c ботов, очищающих контент, наблюдая за поведением сайтов и выявляя закономерности, свойственные скребкам. Когда Distil идентифицирует вредоносного бота на одном сайте, он создает черный профиль поведения, который развертывается для всех его клиентов. Что-то вроде брандмауэра бота, Distil обнаруживает шаблоны и реагирует.

Далее,

"One pattern with Selenium was automating the theft of Web content", сказал генеральный директор Distil Рами Эссаид в интервью на прошлой неделе. "Even though they can create new bots, we figured out a way to identify Selenium the a tool they're using, so we're blocking Selenium no matter how many times they iterate on that bot. We're doing that now with Python and a lot of different technologies. Once we see a pattern emerge from one type of bot, then we work to reverse engineer the technology they use and identify it as malicious".


Ссылка

Вы можете найти несколько подробных обсуждений в:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...