go语言下用chromedp框架编写爬虫程序实现网站登录及内容抓取

某网站,年久失修,使用chromedp开发自动登录及内容抓取程序时面临一系列问题,为了后人少走弯路,简单记录一下整体实现过程。

js错误问题:

chrome 打开登录页面时有如下提示,找不到jquery框架文件:

我们需要自己写代码修复一下网站里面的js错误,解决方法如下:

var executed *runtime.RemoteObject
err = chromedp.Run(ctx, chromedp.Tasks{
		chromedp.Evaluate(`var jq = document.createElement('script'); jq.src = "https://cdn.bootcss.com/jquery/1.4.2/jquery.js"; document.getElementsByTagName('head')[0].appendChild(jq);`,&executed),
})

其他的还是直接看代码吧,

package main

import (
	"context"
	"github.com/chromedp/cdproto/emulation"
	"github.com/chromedp/cdproto/runtime"
	"github.com/chromedp/chromedp"
	"io/ioutil"
	"log"
	"strings"
	"time"
)

func main()  {
	var buf []byte

	// create chrome instance
	ctx, cancel := chromedp.NewContext(
		context.Background(),
		chromedp.WithDebugf(log.Printf),
	)
	defer cancel()

	// create a timeout
	ctx, cancel = context.WithTimeout(ctx, 50*time.Second)
	defer cancel()

	// run task list
	var res string
	var err error

	width, height := 1920, 1080
	err=chromedp.Run(ctx, chromedp.Tasks{
		emulation.SetDeviceMetricsOverride(int64(width), int64(height), 1.0, false),
	})

	loginUrl:=`http://a.b.c.d/login`

	var executed *runtime.RemoteObject
	username:="yourusername"
	password:="yourpassword"
	err = chromedp.Run(ctx, chromedp.Tasks{
		chromedp.Navigate(loginUrl),
		chromedp.Sleep(5 * time.Second),
		chromedp.Evaluate(`var jq = document.createElement('script'); jq.src = "https://cdn.bootcss.com/jquery/1.4.2/jquery.js"; document.getElementsByTagName('head')[0].appendChild(jq);`,&executed),
		chromedp.Sleep(5 * time.Second),
		chromedp.WaitVisible(`#mypassword`, chromedp.ByID),
		chromedp.SendKeys (`input[name="username"]`, username,chromedp.NodeVisible),
		chromedp.SendKeys(`#mypassword`, password, chromedp.ByID),
		chromedp.Sleep(2 * time.Second),
		chromedp.Click(`#login_btn`, chromedp.ByID),
		chromedp.Sleep(5 * time.Second),
		chromedp.CaptureScreenshot(&buf),
	})

	if err != nil {
		log.Fatal(err)
	}
	if err := ioutil.WriteFile("1.png", buf, 0644); err != nil {
		log.Fatal(err)
	}

	indexPageUrl:=`http://a.b.c.d/somepage`

	err = chromedp.Run(ctx, chromedp.Tasks{
		chromedp.Navigate(indexPageUrl),
		chromedp.Sleep(5 * time.Second),
		chromedp.CaptureScreenshot(&buf),
		chromedp.WaitVisible(`#somehtmlid`,chromedp.ByID),
	})
	if err != nil {
		log.Fatal(err)
	}
	if err := ioutil.WriteFile("2.png", buf, 0644); err != nil {
		log.Fatal(err)
	}

	log.Printf("got: `%s`", strings.TrimSpace(res))

}

 

基于GO语言chromedp库实现网站自动登录,以长期定时任务,实现三维家网站自动登录获取cookie,并更新到mysql数据库为例。Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的服务器和分布式系统。以下是Go语言的一些主要特点和优势: 简洁性:Go语言的语法简单直观,易于学习和使用。它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go语言内置了对并发的支持,通过轻量级的goroutine和channel机制,可以轻松实现并发编程。这使得Go语言在构建高性能的服务器和分布式系统时具有天然的优势。 安全性:Go语言具有强大的类型系统和内存管理机制,能够减少运行时错误和内存泄漏等问题。它还支持编译时检查,可以在编译阶段就发现潜在的问题。 标准库:Go语言的标准库非常丰富,包含了大量的实用功能和工具,如网络编程、文件操作、加密解密等。这使得开发者可以更加专注于业务逻辑的实现,而无需花费太多时间在底层功能的实现上。 跨平台:Go语言支持多种操作系统和平台,包括Windows、Linux、macOS等。它使用统一的构建系统(如Go Modules),可以轻松地跨平台编译和运行代码。 开源和社区支持:Go语言是开源的,具有庞大的社区支持和丰富的资源。开发者可以通过社区获取帮助、分享经验和学习资料。 总之,Go语言是一种简单、高效、安全、并发的编程语言,特别适用于构建高性能的服务器和分布式系统。如果你正在寻找一种易于学习和使用的编程语言,并且需要处理大量的并发请求和数据,那么Go语言可能是一个不错的选择。
参考资源链接:[使用Python爬虫技术抓取CNN新闻及其视频内容](https://wenku.csdn.net/doc/6b8182fhnh?utm_source=wenku_answer2doc_content) 在尝试抓取CNN新闻网站的视频内容时,你需要了解如何通过Python的网络爬虫技术来实现。推荐使用《使用Python爬虫技术抓取CNN新闻及其视频内容》作为参考资料,它详细介绍了如何针对CNN新闻网站设计和实现爬虫程序。 首先,你可以使用requests库发送HTTP请求,获取网页内容。例如,通过GET方法向目标URL发送请求,获取网页数据: ```python import requests url = '***' response = requests.get(url) html_content = response.text ``` 接下来,利用BeautifulSoup库来解析HTML文档,找到视频内容的标签,通常视频内容会嵌入到特定的HTML元素中,如`<video>`标签或者通过JavaScript动态加载的内容。提取视频的链接: ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, 'html.parser') video_tags = soup.find_all('video') # 查找所有<video>标签 for video in video_tags: video_url = video.find('source')['src'] # 获取视频的URL地址 # 这里可以根据需要下载视频或进行其他处理 ``` 为了按关键字筛选相关视频,可以在发送请求之前构造含有特定关键字的查询参数。例如,如果想要抓取关于“人工智能”的视频,可以修改URL为`***人工智能`。 此外,考虑到CNN新闻网站可能有反爬虫机制,编写爬虫时应遵守网站的robots.txt规则,合理设置请求头,模拟浏览器行为,并考虑使用代理服务器来避免被封禁。 对于重复抓取的问题,可以通过记录已经爬取的新闻项(例如在new_already_exists.txt文件中)来避免重复。 通过以上步骤,你可以实现一个基本的视频内容抓取爬虫。而对于更深入的学习和实现,建议查看《使用Python爬虫技术抓取CNN新闻及其视频内容》的详细内容,它将为你提供更多的实践指导和解决方案,帮助你更好地理解和掌握如何使用Python进行网络数据采集和音视频处理。 参考资源链接:[使用Python爬虫技术抓取CNN新闻及其视频内容](https://wenku.csdn.net/doc/6b8182fhnh?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

peihexian

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值