在百度上做网站找谁,工程造价信息网官网入口,网站建设宣传预算,学做炒菜的网站昨天突然有一个需求#xff08;自己的#xff09;#xff0c;想把某个网站题目主体部分翻译并保存成图片#xff0c;开始时用了国内网站的翻译#xff08;人工、简单翻译#xff09;#xff0c;后来发现很多地方翻译的不尽人意#xff0c;于是只好用翻译插件对原始网站… 昨天突然有一个需求自己的想把某个网站题目主体部分翻译并保存成图片开始时用了国内网站的翻译人工、简单翻译后来发现很多地方翻译的不尽人意于是只好用翻译插件对原始网站进行翻译插件会在每段后面插入翻译内容、设置使用背景色后显得不凌乱效果还不错至少尊重原文描述保证了题意清晰。本来想着爬取文本然后做翻译什么的但实际使用时需要仅允许使用一个网站其他的都屏蔽掉只好截图了。遇到几个问题记录一下有用到的拿走不谢
〇、首先你要NUGET这玩意和webdriver然后导入它们
Imports OpenQA.Selenium
Imports OpenQA.Selenium.Chrome
一、官方文档各种参数老全了List of Chromium Command Line Switches « Peter Beverloohttps://peter.sh/experiments/chromium-command-line-switches/二、带翻译的截图 开始说过搞了一下有简单翻译的网页直接截图就可以。但是带有插件的就麻烦很多
1、开启插件可以加载指定扩展或者干脆加载用户设置 加载用户设置可以让我们直接使用设置好的chrome非常方便
options.AddArgument(--user-data-dirC:/Users/Administrator/AppData/Local/Google/Chrome/User Data/)
2、开始整活 众所周知一个自动化程序弹出chrome就很low。于是苦难开始了 options.AddArguments(--headless) 似乎应该可以有效吧确实有效浏览器窗口没了插件也跟着没了——即使你开启了插件的各种权限和自动翻译。折腾吧改用以下语句
options.AddArguments(--headlessnew) 新无头模式可以正常加载插件 然后加上各式各样的其他参数就可以启动chromedriver.exe了 If options Is Nothing Thenoptions New ChromeOptions()加载用户配置。解决不加载插件的方法是让浏览器显示出来然后重新安装一遍。。。。而后打开这个设置即可options.AddArgument(--user-data-dirC:/Users/Administrator/AppData/Local/Google/Chrome/User Data/)设置浏览器参数options.AddArguments(--headlessnew) 新无头模式可以正常加载插件options.AddArguments(--no-sandbox)options.AddArguments(--disable-gpu)options.AddArguments(--disable-dev-shm-usage)单进程运行options.AddArgument(--single-process)固定端口options.AddArguments(--remote-debugging-port13888)End IfIf driver Is Nothing Then driver New ChromeDriver(options) 嘎嘎完美如果按下葫芦瓢没飘起来——chromedriver.exe又出来整活了这个命令行窗口还得藏起来。把搜索引擎搜索的直冒火星子之后发现这么两句 Dim service As ChromeDriverService ChromeDriverService.CreateDefaultService()service.HideCommandPromptWindow True 这一看就顾名思义了估摸搞定了然并卵这个语句创建了一个默认配置的服务可是我们并没有用它啊是不是赶脚少点啥就像上了一天学都在神游回到家赶脚心里空落落的酱紫
If driver Is Nothing Then driver New ChromeDriver(service, options) 至此用之前爬取的题目列表继续爬原始网站截图带翻译的题目即可。 driver.Navigate().GoToUrl(purl pid)Thread.Sleep(8000) 如果不需要翻译可以少一些把宽度设置成题目栏最大宽度driver.Manage.Window.Size New Size(1258, 1024)Thread.Sleep(100) 如果不需要翻译可以少一些获取高度和宽度一定要在设置URL之后不然会导致获取不到页面真实的宽高Dim Width As Integer driver.ExecuteScript(return document.documentElement.scrollWidth)Dim Height As Integer driver.ExecuteScript(return document.body.parentNode.scrollHeight)设置宽高否则无法截全这种模式必须运行在--headless下否则窗体无法超过屏幕高度driver.Manage.Window.Size New Size(1258, Height)Thread.Sleep(100)Dim ss As Screenshot CType(driver, ITakesScreenshot).GetScreenshot() ss就是个图像了想怎么剪裁啥的那不归本文管了。 PS别想太多现在就是整个页面——无论它高度是否超过屏幕高度。但这只能在options.AddArguments(--headlessnew)或没有new的模式下使用一旦你显示chrome窗口那么它将无法突破windows对窗口高度的限制——即使你设置的足够高也会被自动设置为不超过屏幕高度。似乎用WINAPI设置可以突破但如果你用鼠标移动这个窗口它又被限制可能WIN7下如此表现其他版本emmmmmm记不清楚了有兴趣的可以试一试。
三、自动填写表单 这个有自动提交功能而且很有趣。代码接上文 driver.Navigate().GoToUrl(https://ooxx.com)Thread.Sleep(2000)driver.FindElement(By.Id(handleOrEmail)).SendKeys(aooooooooooo163.com)driver.FindElement(By.Id(password)).SendKeys(emmmmmmmmmmmm)driver.FindElement(By.Id(enterForm)).Submit()Thread.Sleep(2000) 大概这样就可以登录了。这个工具里面输入啥的都是用SendKeys并且我没有发现直接改属性的函数——当然这不影响你自己写一段java程序然后使用它的接口运行。很有可能还需要取一些ooxx_token啥的打开下个网页需要用到但这也不归本文管啊 下面演示一段好玩的东西——因为我没整明白HTML.Select这个玩意在chromedriver里面到底咋操作有会的还请不吝赐教 戳一下下拉列表有的下拉列表现生成的不戳不行Dim slt driver.FindElement(By.Name(programTypeId))slt.Click()Thread.Sleep(2000)这个列表的text属性会列出全部optionDim cnt As Integer slt.Text.Split(vbCrLf).Length开始整活要的选项的value50开始按上下吧For i As Integer 1 To cntIf slt.GetAttribute(value) 50 Then Exit Forslt.SendKeys(Keys.ArrowDown)Thread.Sleep(200)NextFor i As Integer 1 To cntIf slt.GetAttribute(value) 50 Then Exit Forslt.SendKeys(Keys.ArrowUp)Thread.Sleep(200)Next 幸亏人家网站自动记录上次选的是哪个不然这看起来老low了——全自动填表的半自动人工智障。