Как просматривать весь сайт, используя селен?
Можно ли просмотреть все 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. Снова получите все ссылки со страницы, удалите дубликаты ссылок, которые присутствуют в стеке.
Повторяйте это, пока стек не станет пустым.
Вы можете обновить его в соответствии с вашими требованиями. Например, уровни обхода, исключая другие ссылки, не имеющие домена данного сайта и т. Д.
Пожалуйста, прокомментируйте, если вы обнаружите трудности в реализации.