python实现seleuim执行在已打开的浏览器上操作总结,作为笔记仅供大家参考
# -*- encoding=utf8 -*-
__author__ = "Administrator"
from PIL import Image
from time import sleep
import time
import pyocr
import pyocr.builders
import time
import random
import csv
from lxml import etree # 导入etree子模块
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from airtest_selenium.proxy import WebChrome
from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
import re
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.options import Options
import pyperclip
# 【Python】Selenium一直使用同一个浏览器,不重复开浏览器
# 在实际调试selenium自动化程序时,我们需要手动打开浏览器,进入到所需的页面,执行一些手动任务,如输入表单、输入验证码,登陆成功后,然后再开始运行自动化脚本。
# 这种情况下如何使用selenium来接管先前已打开的浏览器呢?
# 这里给出Google Chrome浏览器的解决方案。
# 我们可以利用Chrome DevTools协议。它允许客户检查和调试Chrome浏览器。
# 打开cmd,在命令行中输入命令:
# chrome.exe --remote-debugging-port=9222 --user-data-dir="C:\selenum\AutomationProfile"
# 可以将其配置在环境变量中
# 对于-remote-debugging-port值,可以指定任何打开的端口。
# 对于-user-data-dir标记,指定创建新Chrome配置文件的目录。它是为了确保在单独的配置文件中启动chrome,不会污染你的默认配置文件。
# 此时会打开一个浏览器页面,我们输入百度网址,我们把它当成一个已存在的浏览器:
# 现在,我们需要接管上面的浏览器。新建一个python文件,运行以下代码:
# from selenium import webdriver
# from selenium.webdriver.chrome.options import Options
# chrome_options=Options()
# chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
# chrome_driver=r'C:\Users\xiaofeng\AppData\Local\Google\Chrome\Application\chromedriver.exe'
# driver=webdriver.Chrome(chrome_driver,chrome_options=chrome_options)
# print(driver.title)
# driver.get('http://10.200.9.183:8074/login.koala')
# 等待的方式有3种:
# 强制等待:必须等这么久,没有任何前提条件,和页面有没有渲染无关;
# 隐性等待:设置一个时间,在设置的时间内,如果页面加载完成了就进行下一步;如果没有加载完成,则会报超时异常;
# 显式等待:设置一个等待时间,一个间隔时间,每隔一段时间执行下util中的方法,直到等待时间结束。
# ————————————————
# 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
# 原文链接:https://blog.csdn.net/weixin_44259720/article/details/127101693
chrome_options=Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")
chrome_driver=r'D:\anaconda2021\Scripts\chromedriver.exe'
driver=webdriver.Chrome(chrome_driver,chrome_options=chrome_options)
# 隐式等待
# 如果某些元素不是立即可用的,隐式等待是告诉WebDriver去等待一定的时间后去查找元素。 默认等待时间是0秒,一旦设置该值,隐式等待是设置该WebDriver的实例的生命周期。
driver.implicitly_wait(3.8)
# response_01 = driver.get("https://guaguabaopin.com/regiment")
# #response_01.encoding = 'utf-8'
# sleep(random.uniform(50,60))
#driver对象调用get_window_size()方法获取当前窗口的大小,返回字典对象
size=driver.get_window_size()
x_0 = size['width']
y_0 = size['height']
print('当前浏览器的宽是:',x_0)
print('当前浏览器的高是:',y_0)
#set_window_size()方法设置当前窗口大小
# driver.set_window_size(200,400,windowHandle='current')
# #再次获取窗口大小
# print(driver.get_window_size(windowHandle='current'))
path_0 = '视频号.txt'
name_lables_list = []
with open(path_0, 'a', encoding='utf-8',newline='\n') as file:
writer = csv.writer(file)
for name_i in range(3000):
try:
#通过 绝对路径找到元素,然后调用点击方法 实现touch
# driver.find_element(By.XPATH,'//*[@id="pvExplorationHost"]/div')
# if 'lables' in locals():
# pass
# else:
# lables = driver.find_elements(By.XPATH,'//*[@id="__next"]/div/main/div/div[4]/div/div/div/div[1]/div/div[@class="flex flex-col items-center pt-[20px]"]/span')
lables = driver.find_elements(By.XPATH,'//*[@id="__next"]/div/main/div/div[4]/div/div/div/div[1]/div/div[@class="flex flex-col items-center pt-[20px]"]/span')
lables_num = len(lables)
print(lables_num)
print("标签===={}".format(name_i))
for lables_i in range(lables_num):
try:
lable = lables[lables_i]
# # 获取坐标
# lables_x = lable.location.get('x')
# lables_y = lable.location.get('y')
# # size_w = lable.size.get('width') #“更多”元素的宽
# # size_h = lable.size.get('height') #“更多”元素的高
# if 300 < lables_y <800:
print(lables_i)
lables_txt = lable.text
print(lables_txt)
# 判断是否在内面
if lables_txt in name_lables_list:
pass
else:
print(lables_txt)
# print(name_lables_list)
print("已经采集的数据量为{}个------------------------------".format(len(name_lables_list)))
name_lables_list.append(lables_txt)
lable.click()
sleep(random.uniform(1.0,1.2))
# 获取当前打开的标签页的句柄
new_tab_handle = driver.window_handles[-1]
# 切换到新打开的标签页
driver.switch_to.window(new_tab_handle)
# 获取文本
try:
name_txt = driver.find_element(By.XPATH,'//*[@id="__next"]/div/main/div/div[1]/div/div[1]/span').text
try:
chengyuan_gentuan_txt = driver.find_element(By.XPATH,'//*[@id="__next"]/div/main/div/div[1]/div/div[2]').text
numbers_list = re.findall(r'\d+', chengyuan_gentuan_txt)
chengyuan_txt = numbers_list[0]
gentuan_txt = numbers_list[1]
except:
chengyuan_txt = "无"
gentuan_txt = "无"
try:
# //*[@id="__next"]/div/main/div/div[1]/div/div[4]/div/span[2] #
weixin_but = driver.find_element(By.XPATH,'//*[@id="__next"]/div/main/div/div[1]/div/div[4]/div/span[3]')
weixin_but.click()
sleep(random.uniform(0.9,1.1))
zhantie_text = pyperclip.paste()
except:
zhantie_text = "无"
with open(path_0, 'a', encoding='utf-8',newline='\n') as file:
writer = csv.writer(file)
writer.writerow([name_txt, chengyuan_txt,gentuan_txt,zhantie_text])
print([name_txt, chengyuan_txt,gentuan_txt,zhantie_text])
except:
pass
# close() 关闭单个窗口 quit() 关闭所有窗口
# 关闭标签,切换到旧的标签页
driver.close()
driver.switch_to.window(driver.window_handles[-1]) #把driver切换到最新弹出来的窗口
except:
pass
#y表示滚动条直接下滑到指定的位置。值越大(2150最大),滑动长度越长。
# drive.execute_script('window.scrollTo(0,2150)')
driver.execute_script('window.scrollTo(0,300)')
sleep(random.uniform(1.2,1.39))
except:
pass