重装了电脑,重装python selenium控制已打开的浏览器
1、pip install selenium
2、从https://npm.taobao.org/mirrors/chromedriver/ 下载相应版本的 chromedriver,并设置环境变量,本机chrome.exe所在目录也加入环境变量,(如果命令行启动chrome有问题,复制并重命名为chrome1.exe)
3、命令行启动浏览器(如果目录C:\selenum\setting不存在,自己建一个)
chrome1.exe --remote-debugging-port=5555 --user-data-dir="C:\selenum\setting"
-remote-debugging-port值,可以指定任何打开的端口。 -user-data-dir标记,指定创建新Chrome配置文件的目录。它是为了确保在单独的配置文件中启动chrome,不会污染你的默认配置文件。
4、操作指定浏览器
# -*- coding: utf-8 -*- from selenium import webdriver from selenium.webdriver.common.by import By options = webdriver.ChromeOptions() options.debugger_address = "127.0.0.1:5555" driver = webdriver.Chrome(options=options) driver.get('http://www.baidu.com')
使用过程中发现selenium新语法变化大,只好参考官方文档:https://www.selenium.dev/documentation/
参考:https://www.cnblogs.com/pythonywy/p/13805061.html
补充:写了一段烂代码,抓取内网json格式2000条信息足够用了
# -*- coding: utf-8 -*- #接管已经打开的浏览器,便于在登录状态下抓取 #命令行执行:chrome.exe --remote-debugging-port=5555 --user-data-dir="C:\selenum\setting" (失败的话复制为chrome1.exe再执行) #from time import sleep #from selenium.webdriver.common.by import By #from selenium.webdriver.support.wait import WebDriverWait from selenium import webdriver from bs4 import BeautifulSoup import json options = webdriver.ChromeOptions() options.debugger_address = "127.0.0.1:5555" driver = webdriver.Chrome(options=options) # 两个同时设置才行 # 实现效果:加载状态停止,进行代码下一步操作 driver.set_page_load_timeout(10) driver.set_script_timeout(10) # 这两种设置都进行才有效 with open("e:/2775.txt", 'a') as file_object: for x in range(1,2776):#2775 id='http://192.1.1.9/api/Title?id='+str(x) driver.get(id) #sleep(3) driver.implicitly_wait(9000) try: html = driver.page_source string = BeautifulSoup(html,"html.parser").get_text() dic = json.loads(string) p0=dic.get('id') p1=dic.get('result').get('code') p2str=dic.get('result').get('requestParams') p2=json.loads(p2str).get('lastname') p3=dic.get('result').get('sex').get('name') p4str=dic.get('result').get('orginfo') p4a = BeautifulSoup(p4str,"html.parser") p4=p4a.a.text pp= p0 +" "+ p1 +" "+p2+" "+p3 +" "+p4 + "\n" file_object.write(pp) except: # 通过js来stop,即可执行后续动作 #driver.execute_script("window.stop()") pass driver.quit()
补充,后来发现少了一个字段,p4a中有2个a标签,要取第二个,增加一行:p5=p4a.a.next_sibling.next_sibling.text