一:因为百度指数的搜索必须先登录才能进行下一步操作,所以先解决登录的问题。
解决登录有两种常用方式:1 利用cookie来登录 2 破解验证码进行登录
如果用phantomjs就能直接截取全图,更利于统计图精确定位了
1:add_Cookie:
用 Chrome():
将登录前的cookie获得,get_cookies()
将所有列表值进行打印。
再将手动登录后的cookie获得,对比登录前和登录后的cookie发现,登录后的cookie比登录前的cookie的长度多2.
对比哪里不同,将不同的cookie设置变量分别为 cookie1,cookie2
或者直接先delete_all_cookie 再直接将所有登录后的cookie用for循环进行全部的添加
2:refresh页面刷新,并全屏窗口以便截图:
指数搜索填写
3:DOWN键盘将窗口滑动到底部,save图片:
因为chrome无法截取全图,那么我们先把他滑动到底部
4:调用PIL的Image模块打开图片操作:
获取元素,并用location取得元素在网页的位置
对将位置进行滑动后,y轴的元素位置的参数进行变化
做x轴和大小的微调。
用croll进行精确局部截图
5:获得统计图:
chrome代码如下:
# -*- coding:utf-8 -*-
import time
import PIL
from PIL import Image
from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.keys import Keys
def main():
driver = webdriver.Chrome()
driver.delete_all_cookies()
driver.get('http://index.baidu.com/')
driver.maximize_window()
driver.save_screenshot('zhishu.png')
driver.delete_all_cookies()
# isover = int(raw_input('完成?1/2'))
isover = 1
print isover==1
if isover == 1:
cookie1 =
# cookie1 =
# cookie2 =
for i in cookie1:
driver.add_cookie(i)
time.sleep(5)
driver.refresh()
print '登陆成功!保存登陆快照'
time.sleep(3)
driver.save_screenshot('new.png')
# whatSearch = raw_input('您想搜索什么指数?')
whatSearch = '特朗普'
driver.find_element_by_id('schword').send_keys(whatSearch.decode('utf-8'))
time.sleep(1)
driver.find_element_by_id('searchWords').click()
time.sleep(2)
driver.maximize_window()
time.sleep(2)
builder = ActionChains(driver)
for down in range(0,4):
builder.key_down(Keys.DOWN).perform()
time.sleep(3)
driver.save_screenshot('tlpAll.png')
imgObj = driver.find_element_by_xpath('//*[@id="trend"]')
left = imgObj.location['x']
top = imgObj.location['y']
right = imgObj.location['x'] + imgObj.size['width']
bottom = imgObj.location['y'] + imgObj.size['height']
im = Image.open('tlpAll.png')
im = im.crop((left+15, top-280, right-15, bottom-418))
im.save('telangpu.png')
if __name__ == "__main__":
main()