chromedriver设置无界面模式 selenium基础操作

chromedriver设置无界面模式

from selenium import webdriver

options = webdriver.ChromeOptions()
# 添加无界面参数
options.add_argument(‘--headless‘)
browser = webdriver.Chrome(options=options)
browser.get(‘http://www.baidu.com/‘)
browser.save_screenshot(‘baidu.png‘)

selenium - 键盘操作

from selenium.webdriver.common.keys import Keys

browser = webdriver.Chrome()
browser.get(‘http://www.baidu.com/‘)
# 1、在搜索框中输入"selenium"
browser.find_element_by_id(‘kw‘).send_keys(‘赵丽颖‘)
# 2、输入空格
browser.find_element_by_id(‘kw‘).send_keys(Keys.SPACE)
# 3、Ctrl+a 模拟全选
browser.find_element_by_id(‘kw‘).send_keys(Keys.CONTROL, ‘a‘)
# 4、Ctrl+c 模拟复制
browser.find_element_by_id(‘kw‘).send_keys(Keys.CONTROL, ‘c‘)
# 5、Ctrl+v 模拟粘贴
browser.find_element_by_id(‘kw‘).send_keys(Keys.CONTROL, ‘v‘)
# 6、输入回车,代替 搜索 按钮
browser.find_element_by_id(‘kw‘).send_keys(Keys.ENTER)

selenium - 鼠标操作

from selenium import webdriver
# 导入鼠标事件类
from selenium.webdriver import ActionChains

driver = webdriver.Chrome()
driver.get(‘http://www.baidu.com/‘)
#输入selenium 搜索
driver.find_element_by_id(‘kw‘).send_keys(‘赵丽颖‘)
driver.find_element_by_id(‘su‘).click()

#移动到 设置,perform()是真正执行操作,必须有
element = driver.find_element_by_name(‘tj_settingicon‘)
ActionChains(driver).move_to_element(element).perform()

#单击,弹出的Ajax元素,根据链接节点的文本内容查找
driver.find_element_by_link_text(‘高级搜索‘).click()

selenium - 切换页面

适用网站

  页面中点开链接出现新的页面,但是浏览器对象browser还是之前页面的对象

应对方案

# 获取当前所有句柄(窗口)
all_handles = browser.window_handles
# 切换browser到新的窗口,获取新窗口的对象
browser.switch_to.window(all_handles[1])

民政部网站案例

目标

  将民政区划代码爬取到数据库中,按照层级关系(分表 -- 省表、市表、县表)

数据库中建表

# 建库
create database govdb charset utf8;
use govdb;
# 建表
create table province(
    p_name varchar(20),
    p_code varchar(20)
    )charset=utf8;
create table city(
    c_name varchar(20),
    c_code varchar(20),
    c_father_code varchar(20)
    )charset=utf8;
create table county(
    x_name varchar(20),
    x_code varchar(20),
    x_father_code varchar(20)
    )charset=utf8;

思路

1、selenium+Chrome打开一级页面,并提取二级页面最新链接
2、增量爬取: 和数据库version表中进行比对,确定之前是否爬过(是否有更新)
3、如果没有更新,直接提示用户,无须继续爬取
4、如果有更新,则删除之前表中数据,重新爬取并插入数据库表
5、最终完成后: 断开数据库连接,关闭浏览器

代码实现

from selenium import webdriver
import pymysql

class GovSpider(object):
  def __init__(self):
    #设置无界面
    options = webdriver.ChromeOptions()
    options.add_argument(‘--headless‘)
    self.browser = webdriver.Chrome(options=options)
    self.one_url = ‘http://www.mca.gov.cn/article/sj/xzqh/2019/‘
    self.db = pymysql.connect(
      ‘localhost‘, ‘root‘, ‘123456‘, ‘govdb‘, charset=‘utf8‘
    )
    self.cursor = self.db.cursor()
    # 创建3个列表,用executemany()往3张表中插入记录
    self.province_list = []
    self.city_list = []
    self.county_list = []

  def get_incr_url(self):
    self.browser.get(self.one_url)
    # 提取最新链接,判断是否需要增量爬
    td = self.browser.find_element_by_xpath(
      ‘//td[@class="arlisttd"]/a[contains(@title,"代码")]‘
    )
    # 提取链接 和 数据库中做比对,确定是否需要怎俩那个抓取
    # get_attribute()会自动补全提取的链接
    two_url = td.get_attribute(‘href‘)
    sel = ‘select url from version where url=%s‘
    # result为返回的受影响的条数
    result = self.cursor.execute(sel, [two_url])
    if result:
      print(‘无须爬取‘)
    else:
      td.click()
      # 切换句柄
      all_handlers = self.browser.window_handles
      self.browser.switch_to.window(all_handlers[1])
      self.get_data()
      # 把URL地址存入version表
      dele = ‘delete from version‘
      ins = ‘insert into version values(%s)‘
      self.cursor.execute(dele)
      self.cursor.execute(ins, [two_url])
      self.db.commit()

  def get_data(self):
    tr_list = self.browser.find_elements_by_xpath(
      ‘//tr[@height="19"]‘
    )
    for tr in tr_list:
      code = tr.find_element_by_xpath(‘./td[2]‘).text.strip()
      name = tr.find_element_by_xpath(‘./td[3]‘).text.strip()
      print(code, name)
      # 数据添加到对应的表中
      if code[-4:] == ‘0000‘:
        self.province_list.append([name, code])
        if name in [‘北京市‘, ‘天津市‘, ‘上海市‘, ‘重庆市‘]:
          self.city_list.append([name, code, code])
      elif code[-2:] == ‘00‘:
        self.city_list.append([name, code, (code[:2])])
      else:
        if code[:2] in [‘11‘, ‘12‘, ‘31‘, ‘50‘]:
          self.county_list.append([name, code, (code[:2] + ‘0000‘)])
        else:
          self.county_list.append([name, code, (code[:4] + ‘00‘)])
    # 执行数据库插入语句
    self.insert_mysql()

  def insert_mysql(self):
    # 1.删除
    del_province = ‘delete from province‘
    del_city = ‘delete from city‘
    del_county = ‘delete from county‘
    self.cursor.execute(del_province)
    self.cursor.execute(del_city)
    self.cursor.execute(del_county)
    # 2.插入
    ins_province = ‘insert into province values(%s,%s)‘
    ins_city = ‘insert into city values(%s,%s,%s)‘
    ins_county = ‘insert into county values(%s,%s,%s)‘
    self.cursor.executemany(ins_province, self.province_list)
    self.cursor.executemany(ins_city, self.city_list)
    self.cursor.executemany(ins_county, self.county_list)
    self.db.commit()
    print(‘数据抓取完成,成功存入数据库‘)

  def main(self):
    self.get_incr_url()
    self.cursor.close()
    self.db.close()
    self.browser.quit()

if __name__ == ‘__main__‘:
  spider = GovSpider()
  spider.main()

代码实现

selenium - Web客户端验证

弹窗中的用户名和密码如何输入?

  不用输入,在URL地址中填入就可以

示例: 爬取某一天笔记

from selenium import webdriver

url = ‘http://tarenacode:[email protected]/AIDCode/aid1904/15-spider/spider_day06_note.zip‘
browser = webdriver.Chrome()
browser.get(url)

原文地址:https://www.cnblogs.com/maplethefox/p/11366037.html

时间: 2024-10-05 23:48:08

chromedriver设置无界面模式 selenium基础操作的相关文章

Selenium(二)---无界面模式+滑动底部

一.使用无界面模式 1.正常情况启动 selenium 是有界面的 2.有些情况下,需要不显示界面,这时只要设置一下参数就可以实现了 # 不想显示界面可以用 Chrome——配置一下参数就好 from selenium import webdriver from selenium.webdriver.chrome.options import Options def main(): chrome_options = Options() chrome_options.add_argument('-

selenium(六)Headless Chrome/Firefox--PhantomJS停止支持后,使用无界面模式。

简介: 以前都用PhantomJS来进行无界面模式的自动化测试,或者爬取某些动态页面. 但是最近selenium更新以后,'Selenium support for PhantomJS has been deprecated, please use headless '提示不支持PhantomJs,请使用headless模式. 好吧,我们还是继续使用firefox chrome的headless模式吧. 一:版本确认 1.windows下 selenium  3.9.0 我使用这个版本的sele

Linux设置开机界面模式

Centos7查看/etc/inittab如下: # systemd uses 'targets' instead of runlevels. # by default, there are two main targets: # # multi-user.target: analogous to runlevel 3 # graphical.target: analogous to runlevel 5 # # To view current default target, run: # sy

selenium基础操作

一. selinum优势 页面级测试,模拟用户真实操作 强大library,支持页面元素各类操作 多浏览器支持(chrome,firefox,ie) 多语言支持(python,java,C#,php,ruby) 二. 需要安装软件 firefox  firebug  seleniumIDE chrome  chromedirver ie  iedriverserver python2.7  selenium lib 三. Selenium IDE 对于初学者,可以先使用selenium IDE录

ubuntu下matlab的无界面启动---命令行操作

命令行下运行 Matlab 及 函数 首先参考命令行下matlab的运行参数的定义与作用:http://www.cnblogs.com/beanocean/p/3677404.html 创建示例程序:test.m [plain] view plain copy function test(x, y) fprintf(num2str(x+y)) end cmd下cd到test.m所在路径,输入如下命令: [plain] view plain copy matlab -nojvm -nodeskto

selenium无界面操作浏览器与Chrome Options的启动项设置

from selenium import webdriver from selenium.webdriver.chrome.options import Options #实例化一个启动参数对象 chrome_options = Options() #配置启动项 chrome_options.add_argument('--headless')#设置无界面模式运行浏览器 chrome_options.add_argument('--start-maximized')#设置启动浏览器时窗口最大化运

selenium无界面chromedriver

from selenium import webdriver # 创建chrome参数对象 opt = webdriver.ChromeOptions() # 把chrome设置成无界面模式,不论windows还是linux都可以,自动适配对应参数 opt.set_headless() # 创建chrome无界面对象 driver = webdriver.Chrome(options=opt) # 访问百度 driver.get('https://baidu.com/') #打印内容 print

Chrome开启无界面浏览模式Python+Windows环境

环境:Python 3.5.x + Selenium 3.4.3 + Chromedriver 2.30 + Chrome 60 beta版 + WIN7/WIN10 chrome_options = webdriver.ChromeOptions() chrome_options.add_argument('--headless') driver = webdriver.Chrome(chrome_options=chrome_options) 代码很简单,只是环境要强调说明一下,Chrome

电商时代的更替,亚马逊无货源模式的崛起 LL-YMX1

互联网时代的发展完全可以用日新月异来形容,而电商行业也是在不断的更替,旧模式玩法的淘汰,新模式的崛起,根据目前的种种情况来看,亚马逊无货源模式便是那个正在不断崛起的新电商模式,这种模式犹如一个不断升起的新星,吸引了越来越多人的目光.一个新模式的崛起必定会有一个旧模式被淘汰掉,亚马逊平台属于一个跨境电商平台,有些对电商行业不了解的朋友可能会问了,为什么不做国内电商而选择跨境电商呢?原因很简单,国内电商就是那个正在不断淘汰的模式,并不是说国内电商平台不行了,而是规则发生了一系列的变化,大量卖家被淘汰