背景
以前爬取过百度翻译的api,比较喜欢百度翻译的重点词汇等一些功能,而百度的官方api没(mei)提(you)供(qian)这系列功能,所以只能自己去爬取下啰,但是用了一段时间百度改了接口的签名方式等,中间研究了下selenium获取翻译内容,遂记录下。
步骤
暂时只测试了chrome版本的,听说firefox浏览器与selenium会有冲突。
1.下载chromedriver并放到浏览器安装目录下面(须下载与chrome浏览器对应的版本)
先找到浏览器的版本,我的为68.0.3440.106
查看与浏览器相对应的chromedriver版本,chromedriver的定义请自行脑补
找到chromedriver版本之后进http://npm.taobao.org/mirrors/chromedriver/ 找到相应的版本下载下来
下载下来之后将chromedriver.exe文件放到chrome的安装目录(我的目录是C:\Program Files (x86)\Google\Chrome\Application)
2.下载selenium对应的java jar包,我的是maven项目,所以直接去maven仓库搜索selenium-chrome-driver即可,不是maven项目请自行下载jar包
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-chrome-driver</artifactId>
<version>3.8.1</version>
</dependency>
3.coding
@Test
public void translate(){
//指定chromedriver.exe位置
System.setProperty("webdriver.chrome.driver","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe");
//打开谷歌浏览器
ChromeOptions chromeOptions = new ChromeOptions();
//设置为 headless 模式 (必须)
chromeOptions.addArguments("--headless");
//设置浏览器窗口打开大小 (非必须)
chromeOptions.addArguments("--window-size=1920,1080");
WebDriver driver=new ChromeDriver();//打开chrome
driver.get("https://fanyi.baidu.com/translate");//打开百度翻译
driver.findElement(By.id("baidu_translate_input")).sendKeys("Hello Java");//输入需要翻译的内容
driver.findElement(By.id("translate-button")).click();//点击搜索按钮
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);//等页面加载,10秒内不加载成功即报超时,TimeUnit.SECONDS 一般用秒作为单位
String aResult=driver.findElement(By.xpath(".//*[@id=\"main-outer\"]/div/div/div[1]/div[2]/div[1]/div[2]/div/div/div[1]/p[2]/span")).getText();//取翻译结果
System.out.println(aResult);
//关闭浏览器
/**
* dr.quit()和dr.close()都可以退出浏览器,简单的说一下两者的区别:第一个close,
* 如果打开了多个页面是关不干净的,它只关闭当前的一个页面。第二个quit,
* 是退出了所有Webdriver所有的窗口,退的非常干净,所以推荐使用quit最为一个case退出的方法。
*/
//driver.quit();
}
4.最终效果
注意
1.chromedriver必须和浏览器对应的版本保持一致
2.下载下来的chromedriver最好放在浏览器安装目录下,编码时最好指定路径