phantomJS,谷歌无头浏览器, 模拟登陆qq空间
无头浏览器就是不用弹出可视化界面
我们主要用的就是谷歌无头浏览器
谷歌无头浏览器
由于PhantomJs最近已经停止了更新和维护,所以推荐大家可以使用谷歌的无头浏览器,是一款无界面的谷歌浏览器。
示例:
from selenium import webdriver from selenium.webdriver.chrome.options import Options import time # 创建一个参数对象,用来控制chrome以无界面模式打开 chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') # 驱动路径 path = r'./chromedriver.exe' # 创建浏览器对象 browser = webdriver.Chrome(executable_path=path, chrome_options=chrome_options) # 上网 url = 'http://www.baidu.com/' browser.get(url) time.sleep(3) browser.save_screenshot('baidu.png') browser.quit()
实际使用
from selenium import webdriver from lxml import etree import time from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') bro = webdriver.Chrome(executable_path='./chromedriver.exe',chrome_options=chrome_options) #让浏览器对指定url发起访问 bro.get('http://125.35.6.84:81/xk/') #获取浏览器当前打开页面的页面源码数据(可见即可得) page_text = bro.page_source time.sleep(2) tree = etree.HTML(page_text) name = tree.xpath('//*[@id="gzlist"]/li[1]/dl/a/text()')[0] print(name) time.sleep(3) bro.quit()
模拟登陆qq空间
import requests from selenium import webdriver from lxml import etree import time driver = webdriver.Chrome(executable_path='./chromedriver.exe') driver.get('https://qzone.qq.com/') # 在web 应用中经常会遇到frame 嵌套页面的应用,使用WebDriver 每次只能在一个页面上识别元素,对于frame 嵌套内的页面上的元素,直接定位是定位是定位不到的。这个时候就需要通过switch_to_frame()方法将当前定位的主体切换了frame 里。 driver.switch_to.frame('login_frame') driver.find_element_by_id('switcher_plogin').click() # driver.find_element_by_id('u').clear() driver.find_element_by_id('u').send_keys('328410948') # 这里填写你的QQ号 # driver.find_element_by_id('p').clear() driver.find_element_by_id('p').send_keys('xxxxxx') # 这里填写你的QQ密码 driver.find_element_by_id('login_button').click() time.sleep(2) # driver.execute_script('window.scrollTo(0,document.body.scrollHeight)') # time.sleep(2) # driver.execute_script('window.scrollTo(0,document.body.scrollHeight)') # time.sleep(2) # driver.execute_script('window.scrollTo(0,document.body.scrollHeight)') # time.sleep(2) # page_text = driver.page_source # # tree = etree.HTML(page_text) # # 执行解析操作 # li_list = tree.xpath('//ul[@id="feed_friend_list"]/li') # for li in li_list: # text_list = li.xpath('.//div[@class="f-info"]//text()|.//div[@class="f-info qz_info_cut"]//text()') # text = ''.join(text_list) # print(text + '\n\n\n') driver.close()
phantomJS
PhantomJS是一款无界面的浏览器,其自动化操作流程和上述操作谷歌浏览器是一致的。由于是无界面的,为了能够展示自动化操作流程,PhantomJS为用户提供了一个截屏的功能,使用save_screenshot函数实现。
from selenium import webdriver import time # phantomjs路径 path = r'PhantomJS驱动路径' browser = webdriver.PhantomJS(path) # 打开百度 url = 'http://www.baidu.com/' browser.get(url) time.sleep(3) browser.save_screenshot(r'phantomjs\baidu.png') # 查找input输入框 my_input = browser.find_element_by_id('kw') # 往框里面写文字 my_input.send_keys('美女') time.sleep(3) #截屏 browser.save_screenshot(r'phantomjs\meinv.png') # 查找搜索按钮 button = browser.find_elements_by_class_name('s_btn')[0] button.click() time.sleep(3) browser.save_screenshot(r'phantomjs\show.png') time.sleep(3) browser.quit()