Selenium用法详解弹框处理JAVA爬虫

Posted 洛阳泰山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selenium用法详解弹框处理JAVA爬虫相关的知识,希望对你有一定的参考价值。

简介

本文主要讲解,java代码利用selenium 控制chrome浏览器中alert (警告框)、confirm确认框)、prompt输入框)的代码教程。

弹框处理

javascript 有三种弹窗 alert(确认)、confirm(确认、取消)、prompt(文本框、确认、取消)。

处理方式:先定位(driver.switchTo().alert()自动获取当前弹窗),再使用 textacceptdismisssend_keys 等方法进行操作。

方法

描述

text

获取弹窗中的文字

accept

接受(确认)弹窗内容

dismiss

解除(取消)弹窗

sendKeys

发送文本至警告框

这里写一个简单的测试页面,其中包含三个按钮,分别对应三个弹窗。

代码如下:

<!DOCTYPE html>
<html lang="en">

<head>
</head>

<body>
<button id="alert">alert</button>
<button id="confirm">confirm</button>
<button id="prompt">prompt</button>

<script type="text/javascript">
    const dom1 = document.getElementById("alert")
    dom1.addEventListener('click', function()
        alert("alert hello")
    )

    const dom2 = document.getElementById("confirm")
    dom2.addEventListener('click', function()
        confirm("confirm hello")
    )

    const dom3 = document.getElementById("prompt")
    dom3.addEventListener('click', function()
        prompt("prompt hello")
    )
</script>
</body>
</html>

下面使用上面的方法进行测试。为了防止弹窗操作过快,每次操作弹窗,都使用 sleep 强制等待一段时间。


import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;

import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.datatransfer.Transferable;
import java.awt.event.KeyEvent;
import java.io.IOException;

public class SeleniumDemo 
    private final static String webDriver = "webdriver.chrome.driver";
    private final static String webDriverPath ="E:\\\\chromedriver\\\\chromedriver.exe";


    public static void main(String[] args) throws InterruptedException, IOException, AWTException 
        System.setProperty(webDriver, webDriverPath);
        WebDriver driver= new ChromeDriver();
        driver.get("file:///C:/Users/liuya/Desktop/test.html");
        Thread.sleep(2000);
        //点击alert按钮
       driver.findElement(By.xpath("//*[@id='alert']")).click();
        Thread.sleep(2000);
        Alert alert= driver.switchTo().alert();
        //打印alert弹窗文本
        System.out.println(alert.getText());
        //确认
        alert.accept();

        Thread.sleep(2000);

        //点击confirm按钮
        driver.findElement(By.xpath("//*[@id='confirm']")).click();
        Thread.sleep(2000);
        Alert confirm= driver.switchTo().alert();
        //打印confirm弹窗文本
        System.out.println(confirm.getText());
        //确认
       // confirm.accept();
        //取消
        confirm.dismiss();

        Thread.sleep(2000);

        //点击prompt按钮
        driver.findElement(By.xpath("//*[@id='prompt']")).click();
        Thread.sleep(2000);
        Alert prompt= driver.switchTo().alert();
        System.out.println(prompt);
        //打印confirm弹窗文本
        System.out.println(prompt.getText());
        Thread.sleep(2000);

        //Chrome 不支持这个方法,其他Firefox 、ie等支持
        // prompt.sendKeys("tarzan");
        //用java robot机器人写入(缺点是不能动浏览器)
        keyPressString(new Robot(),"tarzan");
        Thread.sleep(2000);
        //打印confirm弹窗文本
        System.out.println(prompt.getText());
        //确认
        prompt.accept();

    

    //输入字符串
    public static void keyPressString(Robot r, String str) 
        //获取剪切板
        Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
        //将传入字符串封装下
        Transferable tText = new StringSelection(str);
        //将字符串放入剪切板
        clip.setContents(tText, null);
        //按下Ctrl+V实现粘贴文本
        keyPressWithCtrl(r, KeyEvent.VK_V);
        r.delay(100);
    

    //Ctrl组合键
    public static void keyPressWithCtrl(Robot r, int key) 
        r.keyPress(KeyEvent.VK_CONTROL);
        r.keyPress(key);
        r.keyRelease(key);
        r.keyRelease(KeyEvent.VK_CONTROL);
        r.delay(100);
    



注:经过测试时发现执行 prompt 的 sendKeys 时,不能将文本填入输入框。尝试了各种方法并查看源码,百度寻求答案后,基本确认Chrome 浏览器不支持selenium alert的sendKeys() 方法,我代码中用java robot 进行输入文本,这样做的缺点是不能动浏览器,不然有可能输入到别的地方了。selenium alert的sendKeys() 改用 Firefox 可成功运行。

以上是关于Selenium用法详解弹框处理JAVA爬虫的主要内容,如果未能解决你的问题,请参考以下文章

Selenium用法详解cookies操作JAVA爬虫

Selenium用法详解浏览器控制JAVA爬虫

Selenium用法详解浏览器控制JAVA爬虫

Selenium用法详解键盘控制JAVA爬虫

Selenium用法详解窗口表单切换JAVA爬虫

Selenium用法详解鼠标控制JAVA爬虫