今天做的练习是抓取人民网上面的新闻,和第一篇笔记不同的是这次点击链接是在新窗口打开,涉及到切换窗口抓取的问题。xpath方法是定位到具体层级的,不能跳跃地忽略父从爷定位到孙。由于这次的案例是a标签被包裹在不同的父div中,所以可以用*表示任意父div,再定位到后面的p/strong/a里:
links=driver.find_elements_by_xpath("/html/body/div[14]/div[1]/div/*/p/strong/a")
这里抓取出来的a标签内的元素组成了列表links,列表不能点击,但是列表里的单个元素可以,所以用遍历循环的方法将列表元素逐个赋给link
link=links[i]
这里的link是单一元素,所以可以click了。这里终于解决了第一篇笔记里面遇到的问题,当时发现抓取到所有的链接组成列表links,死活不能用click(因为列表理所当然是不能click的啊),后来只能用get_attribute(href)的方法获取链接,但这里获取到的链接是字符串,还得用get(url)在原窗口打开。现在发现了只需要定位到包裹href链接的a标签,就能通过遍历循环把列表links逐一提取点击:
link.click()
打开了新窗口后,获取全部窗口的句柄(即系统给窗口的编码,如:你正在操作142号窗口)