最新消息:重新回归WordPress,我要比较认真的开始更新我的博客了。

python通过chromedriver控制chrom浏览器

程序问题 hanlei 1552浏览

安装及配置

点击Chrome菜单“帮助”→“关于Google Chrome”,即可查看Chrome的版本号

下载相对应的ChromeDriver,下面给出taobao的镜像源地址

http://npm.taobao.org/mirrors/chromedriver/

在Windows下,建议直接将chromedriver.exe文件拖到Python的Scripts目录下,也可以单独将其所在路径配置到环境变量。

在Linux和Mac下,需要将可执行文件配置到环境变量或将文件移动到属于环境变量的目录里。例如,要移动文件到/usr/bin目录。

随后再在程序中测试,执行如下Python代码:

from selenium import webdriver
browser = webdriver.Chrome()

这里如果报错了,首先看下,python.exe 和chromedriver.exe是不是在同一文件夹下,如果不是,可以将chromedriver.exe放至python.exe文件夹同一目录下,然后再次尝试。

运行之后,如果弹出一个空白的Chrome浏览器,则证明所有的配置都没有问题。如果没有弹出,请检查之前的每一步配置。

如果弹出后闪退,则可能是ChromeDriver版本和Chrome版本不兼容,请更换ChromeDriver版本。

上面的步骤参考https://www.cnblogs.com/blogwangwang/p/9608131.html,网上有很多在初始化浏览器的时候加入端口和其它的一些配置,我试过没成功。

一些常用操用

#导入模块
from selenium import webdriver

#创建浏览器对象
browser = webdriver.Chrome()

#get()方法会等待页面加载完全后才会继续执行下面语句
browser.get(‘https://www.jd.com/’)

#查找节点
node = browser.find_element_by_xpath(’’)
node = browser.find_element_by_id(’’)
node = browser.find_element_by_name(’’)
browser.find_element_by_link_text('科技').click()
browser.find_element(By.CSS_SELECTOR,'.js_service_list a:nth-child(1) .index_service_cnt_item_title').click()
node.send_keys(’’)
node.click()

#判断按钮状态
button.is_enabled()
button.is_displayed()

#获取节点文本内容
content = node.text
content = node.get_attribute('value')

#设置无界面模式
options = webdriver.ChromeOptions()
#也可以用option.set_headless()
options.add_argument(’–headless’)
browser = webdriver.Chrome(options=options)
browser.get(url)

#关闭浏览器
browser.quit()

#键盘操作
from selenium.webdriver.common.keys import Keys
node.send_keys(Keys.SPACE)
node.send_keys(Keys.CONTROL, ‘a’)
node.send_keys(Keys.CONTROL, ‘c’)
node.send_keys(Keys.CONTROL, ‘v’)
node.send_keys(Keys.ENTER)也可以用option.setheadless()

#鼠标操作
from selenium.webdriver import ActionChains
mouse_action = ActionChains(browser)
mouse_action.move_to_element(node)
mouse_action.perform()

#切换句柄
all_handles = browser.window_handles
browser.switch_to.window(all_handles[1])
browser.switch_to.alert.accept()  #确认
browser.switch_to.alert.dismiss() #取消(我碰到的没有取消这个,没错只能同意)
browser.switch_to.alert.send_keys() #输入内容(如果有的话)

#iframe子框架
browser.switch_to.frame(frame_element)
browser.switch_to.default_content()

#执行JS脚本
js = "var q=document.documentElement.scrollTop="+str(2*500)
browser.execute_script(js)
time.sleep(2)

#截图
# 返回字节格式的图片
dirver.get_screenshot_as_png()
# 返回base64格式的图片
driver.get_screenshot_as_base64()
# 保存到本地
driver.get_screenshot_as_file('img1.png')
 
#采集示例
from lxml import etree
from pyquery import PyQuery as pq
page = driver.page_source
doc = pq(page)
doc = etree.HTML(str(doc))
contents = doc.xpath('//div[@class="wcommonFeed"]/ul/li')
print(contents)
for x in contents:
    title = x.xpath('div/div[1]/div/div[1]/a/text()')
    if title:
        title = title[0]
        with open('toutiao.txt', 'a+', encoding='utf8')as f:
            f.write(title+'\n')
        print(title)
    else:
        pass

保存、加载COOKIES

#保存cookies
import pickle
import selenium.webdriver 
driver = selenium.webdriver.Firefox()
driver.get("http://www.google.com")
pickle.dump( driver.get_cookies() , open("cookies.pkl","wb"))
and later to add them back:

#加载cookies
import pickle
import selenium.webdriver 
driver = selenium.webdriver.Firefox()
driver.get("http://www.google.com")
cookies = pickle.load(open("cookies.pkl", "rb"))
for cookie in cookies:
driver.add_cookie(cookie)

转载请注明:HANLEI'BLOG » python通过chromedriver控制chrom浏览器