Как просмотреть весь сайт с помощью селена?

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

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

5 Solutions collect form web for “Как просмотреть весь сайт с помощью селена?”

Для этого вы можете использовать рекурсивный метод в классе, таком как приведенный ниже.

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-адресов и убедиться, что вы не дублируете такую ​​страницу.

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

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

Это возможно. Я реализовал это с помощью Java webdriver и URI. Это было в основном создано для выявления неработающих ссылок.

Использование «getElements» с тегом можно получить с помощью webdriver после открытия и сохранения значения «href».

Проверьте статус всех ссылок с помощью класса URL java и поместите его в стек.

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

Перемещайте его до тех пор, пока стек не будет пустым.

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

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

Я знаю, что вы попросили пример python, но я был просто посреди настройки простой проверки o для испытаний транспортировщика, и задача, которую вы хотите выполнить, кажется очень простой в использовании с транспортиром (это всего лишь обертка вокруг webdriver )

вот код в javascript:

 describe( 'stackoverflow 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://stackoverflow.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) и хром. Если вы используете osx, это должно работать без проблем (при условии, что у вас установлен nodejs)

  • Сообщение для сервера Tornado
  • Как использовать скрипинг с подключением к Интернету через прокси с аутентификацией
  • Scrapy получает href из div
  • как получить доступ к моему 127.0.0.1:8000 из Android-планшета
  • Очистите веб-страницу, которая требует, чтобы они сначала открывали сессионный файл cookie
  • WSGI: какова цель функции start_response
  • Не удалось получить доступ к request.response.meta из скрипта Scrapy
  • Ошибка HTTP 403 в Python 3 Веб-скребок
  • Приложение Flask получает «IOError: Broken pipe»
  • lxml classic: получить текстовый контент, за исключением вложенных тегов?
  • Scrapy: AttributeError: объект 'YourCrawler' не имеет атрибута 'parse_following_urls'
  • Python - лучший язык программирования в мире.