用ipython调试webdriver selenium找元素 不用多次打开浏览器

本文主要是介绍用ipython调试webdriver selenium找元素 不用多次打开浏览器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

运行文件,可把相关变量,函数保存在当前,不必多次打开chrome

%run my_script.py

文件内容:
my_script.py

import pymongo,time,os,json,random
from selenium import webdriver
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
from pyquery import PyQuery as pq
from config import * #数据库、关键词、爬取页数 配置信息
from urllib.parse import quote# browser = webdriver.Chrome()
# browser = webdriver.PhantomJS(service_args=SERVICE_ARGS)chrome_options = webdriver.ChromeOptions()
# chrome_options.add_argument('--headless')
chrome_options.add_argument('user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36')
browser = webdriver.Chrome(r'F:\Demo\python\dianshang\chromedriver.exe',chrome_options=chrome_options)
# 读取隐藏webdriver特征的js
with open('./stealth.min.js') as f:js = f.read()
# 在每个页面加载前执行隐藏driver特征的js实现反爬
browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {"source": js
})
wait = WebDriverWait(browser, 20)
client = pymongo.MongoClient(MONGO_URL) #读取数据库连接地址
db = client[MONGO_DB] #读取数据库名#浏览器复制到原始cookie文件
original_cookie_path='./cookies/original_cookies.txt'
cookies_path='./cookies/cookies.txt' #转化为json后的cookies
url='https://pinduoduo.com'#把从浏览器复制的原始cookies转为json格式并保存
def original_to_cookies():with open(original_cookie_path) as f:original_cookie=f.read()cookie_list=original_cookie.split(';')# print(cookie)cookies={}for c in cookie_list:k,v=c.split('=',1)cookies[k]=v# print(cookies)with open (cookies_path,'w',encoding='utf-8') as f:f.write(json.dumps(cookies))print('cookie成功转为json格式并保存')# 首次手动登录把cookie保存到文本
def save_cookies(cookies):# 保存cookies到文件,参数来自browser.get_cookies()path = os.getcwd() + '/cookies/'if not os.path.exists(path):os.makedirs(path)with open(path + 'cookies.txt', 'w') as f:cookie = json.dumps(cookies)f.write(cookie)print('cookie登录信息成功保存到文件')def read_add_cookie():#cookie登录:读取文件中的cookie并添加到浏览器中实现自动登录path = os.getcwd() + '/cookies/'if os.path.exists(path):# 读取添加cookiewith open('./cookies/cookies.txt','r',encoding='utf-8') as f:cookies=json.loads(f.read())browser.get(url) #刷新使cookie生效browser.delete_all_cookies()for cookie in cookies:browser.add_cookie(cookie)browser.refresh() # 添加cookie后要刷新才能生效print('cookies登录信息成功添加到浏览器')else:print('没有cookie文件!请进行初始手动登录!')def is_Login():# 是否登录:查找登录窗口的元素列表(注意是elements)login=browser.find_elements(By.XPATH,'//*[@id="mf-mms-goods-container"]/div/div/div[1]/span')if len(login)==1: #存在证明登录成功,返回真return Trueelif len(login)==0:return Falsedef login():if not is_Login(): print('cookie登录中,请稍等……')read_add_cookie()time.sleep(5)# 如果没有登录则循环等待5while not is_Login():print('cookie登录失败,请手动进行登录')time.sleep(5)# 结束循环表示登录成功,把cookies保存到文件print('手动登录成功!')cookies=browser.get_cookies()save_cookies(cookies) #保存登录成功的cookie以便下次登录else:print('已经登录,即将开始数据采集')

这篇关于用ipython调试webdriver selenium找元素 不用多次打开浏览器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/965176

相关文章

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

前端bug调试的方法技巧及常见错误

《前端bug调试的方法技巧及常见错误》:本文主要介绍编程中常见的报错和Bug,以及调试的重要性,调试的基本流程是通过缩小范围来定位问题,并给出了推测法、删除代码法、console调试和debugg... 目录调试基本流程调试方法排查bug的两大技巧如何看控制台报错前端常见错误取值调用报错资源引入错误解析错误

Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)

《Python爬虫selenium验证之中文识别点选+图片验证码案例(最新推荐)》本文介绍了如何使用Python和Selenium结合ddddocr库实现图片验证码的识别和点击功能,感兴趣的朋友一起看... 目录1.获取图片2.目标识别3.背景坐标识别3.1 ddddocr3.2 打码平台4.坐标点击5.图

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

解决jupyterLab打开后出现Config option `template_path`not recognized by `ExporterCollapsibleHeadings`问题

《解决jupyterLab打开后出现Configoption`template_path`notrecognizedby`ExporterCollapsibleHeadings`问题》在Ju... 目录jupyterLab打开后出现“templandroidate_path”相关问题这是 tensorflo

JavaWeb-WebSocket浏览器服务器双向通信方式

《JavaWeb-WebSocket浏览器服务器双向通信方式》文章介绍了WebSocket协议的工作原理和应用场景,包括与HTTP的对比,接着,详细介绍了如何在Java中使用WebSocket,包括配... 目录一、概述二、入门2.1 POM依赖2.2 编写配置类2.3 编写WebSocket服务2.4 浏

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...