是否可以使用selenium浏览给定网址(网站)的所有URI?
我的目标是使用我所选择的给定URL的selenium启动firefox浏览器(我知道如何通过这个网站做到这一点),然后让firefox浏览URL(网站)拥有的所有页面。我很感激有关如何在Python中使用它的任何提示/帮助。
答案 0 :(得分:4)
您可以在类中使用递归方法(例如下面给出的方法)来执行此操作。
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();
}
}
希望这会对你有所帮助。
答案 1 :(得分:2)
如果您真的想沿着这条路走下去,我建议您点击页面,将所有元素拉回来,然后循环浏览以点击任何与导航功能相对应的元素(即“// a”或超链接点击)
虽然如果沿着这条路走下去并且有一个页面打开另一个页面,然后有一个链接回来,你会希望保留所有访问过的URL的列表,并确保你不复制这样的页面。 / p>
这样可行,但也需要一些逻辑来实现它......如果你不小心,你可能会发现自己陷入无限循环。
答案 2 :(得分:0)
Selenium API提供了所有工具,您可以通过它来执行各种操作,如类型,单击,转到,导航,在帧之间切换,拖放等。 如果我理解正确的话,你打算做的只是简单地浏览,点击并在网站内提供不同的URl。呀,你绝对可以通过Selenium webdriver来做到这一点。 你可以制作一个属性文件,以便更好地轻松准备,你可以在其中传递不同的属性,如URL,基本URI等,并通过Selenium Webdriver在不同的浏览器中进行自动化测试。
答案 3 :(得分:0)
这是可能的。我已经使用Java webdriver和URI实现了这一点。这主要是为了识别断开的链接而创建的。
使用&#34; getElements&#34;有标签可以使用webdriver一旦打开并保存&#34; href&#34;值。
使用java的URL类检查所有链接状态并将其放入堆栈。
然后从堆栈弹出链接和&#34;得到&#34;使用Webdriver链接。再次从页面中获取所有链接,删除堆栈中存在的重复链接。
循环直到堆栈为空。
您可以根据自己的要求进行更新。例如遍历的级别,不包括没有给定网站域名的其他链接等。
如果您发现实施有困难,请发表评论。
答案 4 :(得分:0)
我知道你要求一个python示例,但我正在设置一个简单的rep 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();
} );
} );
} );
您可以从here
克隆回购注意:我知道量角器可能不是最适合它的工具,但用它来做它很简单,我只是试一试。
我用firefox测试了这个(你可以使用firefox-conf分支,但它需要你手动启动webdriver)和chrome。如果您正在使用osx,这应该没有问题(假设您安装了nodejs)