我默认用的是Chrome浏览器

一、安装selenium和配置Chromedriver

1、安装selenium,直接使用pip安装

pip install selenium

2、chromedriver下载地址:
https://sites.google.com/a/chromium.org/chromedriver/downloads (需要翻墙)
http://npm.taobao.org/mirrors/chromedriver/(阿里的)

注意事项 :chromedriver的版本要与你电脑使用的chrome版本对应,对应关系如下:

ChromeDriver v74.0.3729.6 (2019-03-14) Supports Chrome v74
ChromeDriver v2.46 (2019-02-01) Supports Chrome v71-73
ChromeDriver v2.45 (2018-12-10) Supports Chrome v70-72
ChromeDriver v2.44 (2018-11-19) Supports Chrome v69-71
ChromeDriver v2.43 (2018-10-16) Supports Chrome v69-71
ChromeDriver v2.42 (2018-09-13) Supports Chrome v68-70

chromedriver版本 支持的Chrome版本
v2.41 v67-69
v2.40 v66-68
v2.39 v66-68
v2.38 v65-67
v2.37 v64-66
v2.36 v63-65
v2.35 v62-64
v2.34 v61-63
v2.33 v60-62
v2.32 v59-61
v2.31 v58-60
v2.30 v58-60
v2.29 v56-58
v2.28 v55-57
v2.27 v54-56
v2.26 v53-55
v2.25 v53-55
v2.24 v52-54
v2.23 v51-53
v2.22 v49-52
v2.21 v46-50
v2.20 v43-48
v2.19 v43-47
v2.18 v43-46
v2.17 v42-43
v2.13 v42-45
v2.15 v40-43
v2.14 v39-42
v2.13 v38-41
v2.12 v36-40
v2.11 v36-40
v2.10 v33-36
v2.9 v31-34
v2.8 v30-33
v2.7 v30-33
v2.6 v29-32
v2.5 v29-32
v2.4 v29-32

下载完成后:
windows 下,新建一个命名为chromedriver文件夹,将解压的chromedriver.exe放进文件夹,再配置进path环境变量
Linux下,把下载好的文件放在 /usr/bin 目录下就可以了。

二、浏览器的有界面和无界面设置

1、 有界面

opt = webdriver.Chrome()

2、使用headless无界面浏览器模式

chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
# 启动浏览器,获取网页源代码
opt = webdriver.Chrome(chrome_options=chrome_options)

三、不加载图片设置

# 不加载图片设置
options = webdriver.ChromeOptions()
prefs = {   'profile.default_content_setting_values' : { 'images': 2  }    }
options.add_experimental_option('prefs',prefs)
opt = webdriver.Chrome(chrome_options = options)

四、selenium定位之iframe中的元素定位

1.iFrame有ID 或者 name的情况
//进入id=”frame1”的frame中,定位id=”div1”的div和id=”input1”的输入框。
dr.switchTo().frame(“frame1”);
dr.findElement(By.id(“div1”));
dr.findElement(By.id(“input1”))

2.如果一个iFrame既没有id,也没有name,通用情况
// 定位frame位置,并选取frame
WebElement frame=driver.findElement(By.xpath( “/html/body/div[2]/div[8]/div[2]/div[3]/div/div[2]/div/iframe” ));
driver.switchTo().frame(frame);

3.跳出iFrame
//跳出frame,进入default content;重新定位id=”id1”的div
dr.switchTo().defaultContent();
dr.findElement(By.id(“id1”))

五、后续补充的整理一些设置集合:

1、谷歌:

1
from selenium import webdriver
2
import os
3
4
# 进入浏览器设置
5
options = webdriver.ChromeOptions()
6
# 谷歌无头模式
7
options.add_argument('--headless')
8
options.add_argument('--disable-gpu')
9
# 设置页面大小
10
options.add_argument('window-size=1200x600')
11
# 设置中文
12
options.add_argument('lang=zh_CN.UTF-8')
13
# 更换头部
14
options.add_argument('user-agent="Mozilla/5.0 (iPod; U; CPU iPhone OS 2_1 like Mac OS X; ja-jp) AppleWebKit/525.18.1 (KHTML, like Gecko) Version/3.1.1 Mobile/5F137 Safari/525.20"')
15
# 设置代理
16
options.add_argument('proxy-server=' + proxy)
17
# 禁止加载图片
18
chrome_options.add_argument('blink-settings=imagesEnabled=false')
19
# 不加载图片
20
options.add_experimental_option('prefs', {"profile.managed_default_content_settings.images": 2})
21
# 设置下载路径
22
options.add_experimental_option('prefs', {"download.default_directory": os.path.abspath('数据\\')})
23
# 除去“正受到自动测试软件的控制”
24
options.add_argument('disable-infobars')
25
# 打开开发者模式
26
options.add_experimental_option('excludeSwitches', ['enable-automation'])
27
# 导入当前py文件目录下的chromedriver
28
executable_path = os.path.abspath('chromedriver.exe')
29
30
browser = webdriver.Chrome(executable_path=executable_path, chrome_options=options)
31
url = "https://httpbin.org/get?show_env=1"
32
browser.get(url)
33
# 设置浏览器窗口大小
34
browser.set_window_size(1552, 800)
35
# 删除原来的cookie
36
browser.delete_all_cookies()
37
# 添加cookie
38
browser.add_cookie({'name':'ABC','value':'DEF'})
39
# 刷新当前页面
40
browser.refresh()
41
# 通过js新打开一个窗口
42
page_js='window.open("https://www.baidu.com");'
43
browser.execute_script(page_js)
44
# 用js点击元素
45
button = browser.find_element_by_xpath('//*[@class="button"]')
46
browser.execute_script("$(arguments[0]).click()",button)
47
# 用js滑动滑动条
48
js = "var q=document.documentElement.scrollTop="
49
for i in range(1, 15):
50
     browser.execute_script(js + str(i * 100))
51
# 切换浏览器最新页面窗口
52
browser.switch_to.window(browser.window_handles[-1])
53
# 切换浏览器至第一个iframe框架
54
browser.switch_to.frame(1)
55
# 切换浏览器的弹出框 并点击同意
56
self.browser.switch_to.alert.accept()
57
# 浏览器窗口对象
58
browser.window_handles: list
59
# 关闭当前窗口
60
browser.close()
61
# 关闭浏览器
62
browser.quit()

2、火狐浏览器:

1
from selenium.webdriver.common.proxy import * 
2
# 代理
3
myProxy = '202.202.90.20:8080'
4
# 代理格式
5
proxy = Proxy({
6
  'proxyType': ProxyType.MANUAL, 
7
  'httpProxy': myProxy, 
8
  'ftpProxy': myProxy, 
9
  'sslProxy': myProxy, 
10
  'noProxy': ''
11
 })
12
13
profile = webdriver.FirefoxProfile()
14
profile = get_firefox_profile_with_proxy_set(profile, proxy)
15
profile.set_preference("general.useragent.override", user_agent)
16
17
# firefox无头模式
18
options = webdriver.FirefoxOptions()
19
options.add_argument('--headless')
20
options.add_argument('--disable-gpu')
21
options.add_argument('window-size=1200x600')
22
executable_path = os.path.abspath('geckodriver.exe')
23
24
driver=webdriver.Firefox(proxy=proxy, profile=profile, 
25
						 options=options, executable_path=executable_path) 
26
driver.get('https://www.baidu.com') 
27
driver.quit()
28
29
# 火狐浏览器不加载图片
30
from selenium import webdriver
31
options=webdriver.FirefoxProfile()
32
options.set_preference(‘permissions.default.image’,2)
33
b=webdriver.Firefox(options)
34
35
# 找到的另外一些设置方法
36
from selenium import webdriver
37
# 浏览器选项
38
firefox_options = webdriver.FirefoxOptions()
39
# 使用headless无界面浏览器模式
40
firefox_options.add_argument('--headless')
41
# 谷歌文档提到需要加上这个属性来规避bug
42
firefox_options.add_argument('--disable-gpu')
43
# 设置默认编码为utf-8
44
firefox_options.add_argument('lang=zh_CN.UTF-8')
45
# 隐藏滚动条, 应对一些特殊页面
46
firefox_options.add_argument('--hide-scrollbars')
47
# 禁止加载图片
48
firefox_options.add_argument('blink-settings=imagesEnabled=false')
49
# 指定浏览器分辨率
50
firefox_options.add_argument('window-size=1440x900')
51
# driver.maximize_window()
52
# 设置默认请求头
53
firefox_options.add_argument('user-agent="Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X)AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1"')
54
# 设置代理
55
desired_capabilities = firefox_options.to_capabilities()
56
desired_capabilities['proxy'] = {
57
    "httpProxy":PROXY,
58
    "ftpProxy":PROXY,
59
    "sslProxy":PROXY,
60
    "noProxy":None,
61
    "proxyType":"MANUAL",
62
    "class":"org.openqa.selenium.Proxy",
63
    "autodetect":False
64
}
65
# 启动浏览器,获取网页源代码
66
driver = webdriver.Firefox(firefox_options=firefox_options)
67
68
69
# 另一种设置代理方法:
70
profile=webdriver.FirefoxOptions()
71
profile.add_argument('-headless') #设置无头模式
72
#设置代理服务器
73
profile.set_preference('network.proxy.type', 1)
74
profile.set_preference('network.proxy.http',IP)#IP为你的代理服务器地址:如‘127.0.0.0’,字符串类型
75
profile.set_preference('network.proxy.http_port', PORT)  #PORT为代理服务器端口号:如,9999,整数类型
76
browser=webdriver.Firefox(options=profile)

3、常用操作:

1
# 清除数据
2
self.browser.find_element_by_id("TPL_username_1").clear()
3
# 输入数据
4
self.browser.find_element_by_id("TPL_username_1").send_keys(f'{i}')
5
# 点击
6
self.browser.find_element_by_id("J_SubmitStatic").click()
7
# xpath获取
8
self.browser.find_element_by_xpath(f'//*[@id="J_QRCodeLogin"]/div[5]/a[1]').click()
9
# 鼠标点击
10
from selenium.webdriver import ActionChains
11
ac = self.browser.find_element_by_xpath('//*[@id="my-page"]/div/div/div/span[1]')
12
ActionChains(self.browser).move_to_element(ac).click(ac).perform()
13
# 动态加载 下拉
14
self.browser.execute_script("window.scrollBy(0,1000)")
15
time.sleep(1)
16
self.browser.execute_script("window.scrollBy(0,2000)")
17
time.sleep(2)
18
self.browser.execute_script("window.scrollBy(0,3000)")
19
time.sleep(0.5)
20
self.browser.execute_script("window.scrollBy(0,4000)")
21
time.sleep(0.5)
22
self.browser.execute_script("window.scrollBy(0,5000)")
23
time.sleep(0.5)
24
self.browser.execute_script("window.scrollBy(0,6000)")
25
# 模拟键盘操作
26
from selenium.webdriver.common.keys import Keys
27
self.browser.find_element_by_id("TPL_username_1").send_keys(Keys.NUMPAD5)
28
Keys.BACK_SPACE    # 回退键(BackSpace)
29
Keys.TAB    # 制表键(Tab)
30
Keys.ENTER    # 回车键(Enter)
31
Keys.SHIFT    # 大小写转换键(Shift)
32
Keys.CONTROL    # Control键(Ctrl)
33
Keys.ALT    # ALT键(Alt)
34
Keys.ESCAPE    # 返回键(Esc)
35
Keys.SPACE    # 空格键(Space)
36
Keys.PAGE_UP    # 翻页键上(Page Up)
37
Keys.PAGE_DOWN    # 翻页键下(Page Down)
38
Keys.END    # 行尾键(End)
39
Keys.HOME    # 行首键(Home)
40
Keys.LEFT    # 方向键左(Left)
41
Keys.UP    # 方向键上(Up)
42
Keys.RIGHT    # 方向键右(Right)
43
Keys.DOWN    # 方向键下(Down)
44
Keys.INSERT    # 插入键(Insert)
45
DELETE    # 删除键(Delete)
46
NUMPAD0 ~ NUMPAD9    # 数字键1-9
47
F1 ~ F12:F1 - F12键    #
48
(Keys.CONTROL, ‘a’)    # 组合键Control+a,全选
49
(Keys.CONTROL, ‘c’)    # 组合键Control+c,复制
50
(Keys.CONTROL, ‘x’)    # 组合键Control+x,剪切
51
(Keys.CONTROL, ‘v’)    # 组合键Control+v,粘贴

参考的网站有:
https://www.cnblogs.com/lijuanfei/p/10372651.html
https://www.cnblogs.com/wuhl-89/p/9453885.html
https://blog.csdn.net/yoyocat915/article/details/80580066
https://blog.csdn.net/ircszwfcbvdgk234/article/details/78605052
https://blog.csdn.net/zin521/article/details/82177874
http://blog.sina.com.cn/s/blog_68f262210101mcxp.html
https://blog.csdn.net/weixin_32759777/article/details/84569767
https://www.cnblogs.com/yoyo1216/p/10136043.html