Как просматривать весь сайт, используя селен?

Можно ли просмотреть все URI данного URL (веб-сайта) с помощью селена?

Моя цель - запустить браузер Firefox с использованием селена с заданным URL-адресом по моему выбору (я знаю, как сделать это благодаря этому веб-сайту), а затем позволить Firefox просмотреть все страницы, которые есть на этом URL (веб-сайте). Я ценю любую подсказку / помощь о том, как сделать это в Python.

5 ответов

Решение

Вы можете использовать рекурсивный метод в классе, таком как приведенный ниже, чтобы сделать это.

public class RecursiveLinkTest {
    //list to save visited links
    static List<String> linkAlreadyVisited = new ArrayList<String>();
    WebDriver driver;

    public RecursiveLinkTest(WebDriver driver) {
        this.driver = driver;
    }

    public void linkTest() {
        // loop over all the a elements in the page
        for(WebElement link : driver.findElements(By.tagName("a")) {
            // Check if link is displayed and not previously visited
            if (link.isDisplayed() 
                        && !linkAlreadyVisited.contains(link.getText())) {
                // add link to list of links already visited
                linkAlreadyVisited.add(link.getText());
                System.out.println(link.getText());
                // click on the link. This opens a new page
                link.click();
                // call recursiveLinkTest on the new page
                new RecursiveLinkTest(driver).linkTest();
            }
        }
        driver.navigate().back();
    }

    public static void main(String[] args) throws InterruptedException {
        WebDriver driver = new FirefoxDriver();
        driver.get("http://newtours.demoaut.com/");
        // start recursive linkText
        new RecursiveLinkTest(driver).linkTest();
    }
}

Надеюсь, это поможет вам.

Как упоминает Кьяти, возможно, что селен не является веб-сканером или роботом. Вы должны знать, где / что вы пытаетесь проверить.

Если вы действительно хотите пойти по этому пути, я бы порекомендовал вам перейти на страницу, перетащить все элементы назад, а затем перебрать все элементы, которые соответствуют функциональности навигации (например, "//a" или щелчок по гиперссылке).

Хотя если вы идете по этому пути, и есть страница, которая открывает другую страницу, тогда есть ссылка назад, вы захотите сохранить список всех посещенных URL-адресов и убедиться, что вы не дублируете такую ​​страницу.

Это бы сработало, но потребовало бы немного логики, чтобы это произошло... и вы можете оказаться в бесконечном цикле, если не будете осторожны.

Я знаю, что вы просили привести пример с Python, но я только начинал настраивать простой репозиторий для испытаний транспортира, и задача, которую вы хотите выполнить, кажется очень простой для выполнения с транспортиром (который является просто оболочкой для веб-драйвера).)

Вот код в JavaScript:

describe( 'stackru scrapping', function () {
  var ptor = protractor.getInstance();

  beforeEach(function () {
    browser.ignoreSynchronization = true;
  } );

  afterEach(function () {

  } );

  it( 'should find the number of links in a given url', function () {
    browser.get( 'http://stackru.com/questions/24257802/how-to-browse-a-whole-website-using-selenium' );

    var script = function () {
      var cb = arguments[ 0 ];
      var nodes = document.querySelectorAll( 'a' );
      nodes = [].slice.call( nodes ).map(function ( a ) {
        return a.href;
      } );
      cb( nodes );
    };

    ptor.executeAsyncScript( script ).then(function ( res ) {
      var visit = function ( url ) {
        console.log( 'visiting url', url );
        browser.get( url );
        return ptor.sleep( 1000 );
      };

      var doVisit = function () {
        var url = res.pop();
        if ( url ) {
          visit( url ).then( doVisit );
        } else {
          console.log( 'done visiting pages' );
        }
      };

      doVisit();

    } );
  } );

} );

Вы можете клонировать репо отсюда

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

Я проверил это с помощью firefox (вы можете использовать для этого ветку firefox-conf, но для этого потребуется вручную запустить webdriver) и chrome. Если вы используете osx, это должно работать без проблем (при условии, что у вас установлен nodejs)

Selenium API предоставляет все средства, с помощью которых вы можете выполнять различные операции, такие как тип, щелчок, переход, навигация, переключение между кадрами, перетаскивание и т. Д. То, что вы намереваетесь сделать, это просто просматривать в простых терминах, нажимать и предоставлять различные URls на сайте также, если я правильно понял. Да, вы определенно можете сделать это через веб-драйвер Selenium. Кроме того, вы можете создать файл свойств для большей простоты и готовности, где вы можете передавать различные свойства, такие как URL-адреса, базовый URI и т. Д., И выполнять тестирование автоматизации с помощью Selenium Webdriver в разных браузерах.

Это возможно. Я реализовал это с помощью веб-драйвера Java и URI. Это было в основном создано, чтобы идентифицировать неработающие ссылки.

Используя "getElements", имеющий тег, можно получить с помощью веб-драйвера после открытия и сохранить значение "href".

Проверьте все ссылки статуса, используя класс URL Java и положить его в стек.

Затем извлеките ссылку из стека и получите ссылку, используя Webdriver. Снова получите все ссылки со страницы, удалите дубликаты ссылок, которые присутствуют в стеке.

Повторяйте это, пока стек не станет пустым.

Вы можете обновить его в соответствии с вашими требованиями. Например, уровни обхода, исключая другие ссылки, не имеющие домена данного сайта и т. Д.

Пожалуйста, прокомментируйте, если вы обнаружите трудности в реализации.

Другие вопросы по тегам