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

Можно ли пройти через все 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)

  • PyQt: QImage () возвращает 'Null'-Image
  • Scrapy. Как изменить настройки паука после начала сканирования?
  • Scrapy, похоже, не делает DFO
  • Передача мета элементов через функцию обратного вызова в scrapy
  • селен с scrapy для динамической страницы
  • Как получить Github Webhooks в Python
  • разобрать содержимое html путем передачи пользовательского ввода даты
  • соскабливание нескольких страниц с помощью scrapy
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.