听闻微软出了一款自动化测试工具Playwright,功能类似Selenium,Pyppeteer。又听闻它可以自动生成代码……
从此不写代码了
二话不说,先安装。
pdm init #搞个虚拟环境先
pdm add playwright
pdm run playwright install #安装浏览器驱动
然后,从此码农翻身的时刻到来了:
pdm run playwright codegen \-o autorun.py
左边是浏览器,右边是同步生成的代码。
生成的代码:
好家伙!直呼好家伙!本文结束,完结撒花。
抓取微信文章保存为markdown
还是干点实际的事情吧。
例如用来保存微信公众号文章,输出成markdown。
获取页面内容
def get_html_content(html_url,html_filename,step):
'''
获取html页面的内容,相当于ctrl+s
:param html_url: 抓取的url链接
:param html_filename: 输出的html文件名
:param step: 调整页面滚动速度,默认为500
'''
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.goto(html_url)
page.wait_for_load_state('networkidle') #等待网络加载完毕再进行操作
html = page.content()
with open(html_filename,'w',encoding='utf-8') as f:
f.write(html)
browser.close()
处理懒加载图片
经过上一步,发现一个bug,保存的html文件里没有把懒加载的图片给保存下来。
查看官方文档无果,只好添加一段javascript手动执行滚动页面。
# get_html_content.py
def get_html_content(html_url,html_filename,step):
'''
获取html页面的内容,相当于ctrl+s
:param html_url: 抓取的url链接
:param html_filename: 输出的html文件名
:param step: 调整页面滚动速度,默认为500
'''
with sync_playwright() as p:
browser = p.chromium.launch(headless=False)
page = browser.new_page()
page.set_default_timeout(50000)
page.goto(html_url)
page.wait_for_load_state('networkidle')
#设置滚动坐标初始位置
start_position = 0
#获取整个页面内容高度
scroll_Height = page.evaluate('window.document.body.scrollHeight')
while(start_position<scroll_Height):
#不断增加坐标
start_position = start_position+step
position = str(start_position)
#构造javascript
run_scroll = 'window.scrollTo(0,'+position+')'
#执行滚动
page.evaluate(run_scroll)
#防止滚动太快
page.wait_for_timeout(1000)
html = page.content()
with open(html_filename,'w',encoding='utf-8') as f:
f.write(html)
browser.close()
加上html转markdown功能
# html_to_markdown.py
import html2text as ht
def to_markdown(html_filename,markdown_filename):
'''
输入html文件生成markdown文件
:param html_filename: 输入的html文件名
:param markdown_filename: 输出的markdown文件名
'''
text_maker = ht.HTML2Text()
with open(html_filename,'r',encoding='utf-8') as f:
htmlpage = f.read()
text = text_maker.handle(htmlpage)
with open(markdown_filename,'w',encoding='utf8') as f:
f.write(text)
弄得像样一点
总不能每次抓取就修改源码,于是直接用argparse包增加命令行参数。
if __name__ == '__main__':
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf8')
parser = argparse.ArgumentParser()
#PS:输入的url如果含有'&'符号,整个url需要用引号''括起来,否则就会和bash中的&后台命令造成冲突。
parser.add_argument('url',type=str,help='target url')
parser.add_argument('-l','--html',type=str,default='output.html',help='filename of html')
parser.add_argument('-m','--markdown',type=str,default='output.markdown',help='filename of markdown')
parser.add_argument('-s','--step',type=int,default=500,help='step of scroll every second')
args=parser.parse_args()
print(args.url)
get_html_content(html_url=args.url,html_filename=args.html,step=args.step)
to_markdown(args.html,args.markdown)
print('Done!')
大功告成
运行看看效果:
运行过程:
保存的markdown:
勉强能用……
Playwright官方文档:https://playwright.dev/python/docs/intro
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典
简历模板
若有侵权,请联系删除