python实现seleuim执行在已打开的浏览器上操作总结

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
        


            


  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据采集及分析RPA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值