如何解决使用chromedp和golang进行网络抓取会引发消息“无法检索属性externalHTML遇到未捕获的异常”
我参与的项目是在Google翻译网站上将很多非英语文本翻译成英语。
在NodeJS中,我使用了puppeteer从Google翻译中获取HTML源。
我曾经使用过axios和cheerio,但由于需要处理动态加载,因此无法翻译内容。
我正在使用Go语言,因此我选择了可以执行真正的chrome标签的chromedp软件包。
当执行OuterHTML代码时,
返回错误消息“无法检索属性externalHTML遇到未捕获的异常”。
我还添加了useragent,并使用超时代码进入睡眠状态。
我知道没有有用的软件包可以替代chromedp。
我该如何解决?
元素类型参数是需要翻译的字符串切片。
func Translate(elements []string) []string {
translated := []string{}
options := []chromedp.ExecAllocatorOption{
chromedp.UserAgent(agent),chromedp.Flag("Headless",false),}
ctx,cancel := chromedp.NewExecAllocator(context.Background(),options...)
defer cancel()
ctx,cancel = chromedp.NewContext(ctx)
defer cancel()
ctx,cancel = context.WithTimeout(ctx,time.Second*30)
defer cancel()
for _,element := range elements {
source := ""
apiURL := "https://translate.google.co.kr/?hl=ko#view=home&op=translate&sl=ko&tl=en&text=" + element
if err := chromedp.Run(ctx,chromedp.Navigate(apiURL),chromedp.Sleep(time.Second*5),//chromedp.WaitVisible(".tlid-translation",chromedp.ByQuery),chromedp.OuterHTML("html",&source),); err != nil {
log.Println(err)
chromedp.Cancel(ctx)
return []string{}
}
time.Sleep(time.Second * 2)
doc,_ := goquery.NewDocumentFromreader(strings.NewReader(source))
sample := doc.Find(".tlid-translation").Text()
fmt.Println(sample)
translated = append(translated,strings.Trimspace(sample))
time.Sleep(time.Second * 2)
}
return translated
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。