使用selenium实现自动登录,iframe切换,节点快速查找定位

        公司需要,已经写好了抓取数据的程序,可惜因为是IE8中才能登陆,目前流行的抓数据技术在IE8中执行会出现js错误。而想正常抓数据必须要登陆后获取sessionid,手工的话比较麻烦,而且一旦登陆过期程序会自动退出,这时就像人工重新登陆,获取新的sessionid,重新启动程序。为了在抛出sessionid失效异常的时候实现自动重新登录获取新的sessionid,继续抓取数据,打算使用selenium实现自动登录等。

      1: 首先在pom中引入依赖:

  

               <dependency>
			<groupId>org.seleniumhq.selenium</groupId>
			<artifactId>selenium-java</artifactId>
			<version>3.6.0</version>
		</dependency>

2:配置  IEDriverServer.exe

    找到相应版本的浏览器内核驱动,这里以IE为例,把IEDriverServer.exe放在windows/system32目录下,执行API是会自动到这里查找,无需多余配置。如果想放到其他目录,则要在使用selenium类之前设置系统属性:

  

System.setProperty("webdriver.ie.driver","C:\\Utils\\IDDriverServer.exe");

3:打开IE,设置-》兼容性视图设置,把要访问的网址添加进去。然后点击 设置-》Internet选项-》安全  这里有四个大的选项,安全级别分别选择 高,高,中,高。 都勾选启用保护模式,点击应用,确定。

 

4:编码实现登录

  以下两行代码打开百度首页,当然这只是个例子,我打开的是第三方网站的登录界面。

        WebDriver driver = new InternetExplorerDriver();

        driver.get("http:www.baidu.com");

获取js执行对象:

JavascriptExecutor js = (JavascriptExecutor) driver;

通过iframe 的name切换frame:

 driver.switchTo().frame("myframe");

从子iframe切换到父页面:

 driver.switchTo().defaultContent();

分析页面元素,找到对应的用户名和密码的输入框id:

 js.executeScript("var name=document.getElementById('username');name.value='用户名'");
 js.executeScript("var pwd=document.getElementById('password');pwd.value='密码'");

动态设置用户名和密码,点击登录按钮:

       WebElement login=driver.findElement(By.id("login"));
        //点击登录按钮
        login.click();
        //登录可能需要花费一定的时间,可以设置等待时间或者睡眠
        new WebDriverWait(driver, 10);
        Thread.sleep(9000);

此时通过以下代码可以获取登录界面html:

driver.getPageSource();

5: 实现元素快速查找

 这里主要使用xpath技术查找,只给个样例,具体xpath语法自行百度。

查找tr中的td内容是  卫生服务  的td元素。

 WebElement service=driver.findElement(By.xpath("//tr[td='卫生服务']"));

 

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值