Почему некоторые сайты не могут быть автоматизированы с помощью Selenium - PullRequest
0 голосов
/ 13 декабря 2018

Я пытался автоматизировать https://www.westernunion.com/global-service/track-transfer веб-страницу, но не мог понять, почему веб-сайт не переходит на следующую страницу.

Мой скрипт открывает страницу -> Ввод MTCN как 2587051083 -> Нажатие наКнопка Продолжить, но после нажатия ничего не появляется.В то же время репликация тех же шагов в ручном режиме работает хорошо.Есть ли какие-либо настройки браузера, которые я пропускаю для таких сайтов?Я невежественна

public static void main(String ar[]) {
        System.setProperty("webdriver.chrome.driver","D:\\Study\\selenium-java-2.48.2\\selenium-2.48.2\\chromedriver.exe");
        driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.manage().window().maximize();
        driver.get("https://www.westernunion.com/global-service/track-transfer");
        driver.findElement(By.xpath("//input[@id='trackingNumber']")).sendKeys("2587051083");
        driver.findElement(By.xpath("//button[@id='button-track-transfer']")).click();
        }

1 Ответ

0 голосов
/ 14 декабря 2018

На https://www.westernunion.com/global-service/track-transfer веб-странице для отправки символа в поле отслеживания Я внес небольшие изменения в ваш собственный код, вызывая WebDriverwait длятребуемый элемент, на который можно кликнуть , а затем вызвать click() для элемента с текстом Продолжить следующим образом:

  • Блок кода:

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.chrome.ChromeOptions;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    public class westernunion {
    
        public static void main(String[] args) {
    
            System.setProperty("webdriver.chrome.driver","C:\\Utility\\BrowserDrivers\\chromedriver.exe");
            ChromeOptions opt = new ChromeOptions();
            opt.addArguments("start-maximized");
            opt.addArguments("disable-infobars");
            opt.addArguments("--disable-extensions");
            WebDriver driver=new ChromeDriver(opt);
            driver.get("https://www.westernunion.com/global-service/track-transfer");
            new WebDriverWait(driver, 10).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input.new-field.form-control.tt-mtcn.ng-pristine.ng-valid-mask"))).sendKeys("2587051083");
            driver.findElement(By.cssSelector("button.btn.btn-primary.btn-lg.btn-block.background-color-teal.remove-margin#button-track-transfer")).click();
        }
    }
    

Кажется, что click() действительно происходит, и счетчик становится видимым на некоторое время, но поиск прерывается и при проверке веб-страницы вы обнаружите, что некоторые теги <script> и <link> относятся к css с ключевым словом dist .В качестве примера:

  • <link rel="stylesheet" type="text/css" href="/content/wucom/dist/20181210075630/css/responsive_css.min.css">
  • <script src="/content/wucom/dist/20181210075630/js/js-bumblebee.js"></script>
  • <link ng-if="trackTransferVm.trackTransferData.newTrackTransfer || trackTransferVm.trackTransferData.isRetail" rel="stylesheet" type="text/css" href="/content/wucom/dist/20181210075630/css/main.min.css" class="ng-scope" style="">

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


Distil

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

Distil защищаетсайты против автоматических ботов по сбору контента, наблюдая за поведением сайта и выявляя закономерности, характерные для скребков.Когда 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, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...