selenium的浏览器复用及cookies的使用

1,复用浏览器
webdriver启动时将不再创建新的浏览器窗口 将运用已打开的浏览器的当前页面进行元素的操作
  启动复用浏览器命令: chrome -remote-debugging-port=9333 (端口号确认没有被占用的情况下随便取)
在脚本调用时和此端口一致即可 需要导入selenium的Options库
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
class Test_open():
  def setup_method(self,method):
    chrome_options=Options()
    chrome_options.debugger_address='127.0.0.1:9333' #复用浏览器的地址和端口
    self.driver=webdriver.chrome(options=chrome_options) #启动浏览时传入复用地址和端口
  def test_web(self):
    self.driver.get('https://www.baidu.com')
 注意:脚本运行时需要 先执行 chrome -remote-debugging-port=9333 此时打开网站时就不会开启新的窗口


1,cookies的获取及使用
什么是cookies这个不在复述,selenium 提供了获取cookies的方法 ,此处运用了shelve 来持久化对象
import shelve
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options


class Test_Index():
def setup_method(self, method):
self.driver=webdriver.Chrome()
self.driver.implicitly_wait(10)


def test_index(self):
#获取当前浏网站的cookies
#cookies=self.driver.get_cookies()
#cookies=[{'domain': '.starokay.com', 'httpOnly': False, 'name': 'Hm_lpvt_bf33deb3c466dc7efec1573749bc1bfc', 'path': '/', 'secure': False, 'value': '1608618454'}, {'domain': 'www.starokay.com', 'expiry': 1611210453, 'httpOnly': False, 'name': '_userAuth', 'path': '/', 'secure': False, 'value': '%002V1Wf%03%3AU0%020W1%01ePb%05cQe%01iQ5Q9U%3ET%28%07wW%3C%030To%07v%04mP%60U%23%068Ut%05j%04gS%3CV%25U6%07%22%008VtWl%03%3AU%3C%02+Wv%01%26P0%05%25Qj%012QiQeU%26Th%07wW%3C%033Td%07n%04%26P5U2%066U5%05%60%04fS1V4U4%075%006V%25Wm%03qU%3C%02%3AW9%01wP%3B%05%3EQg%018QjQaUiT6%07%26W%3D%03qTo%07e%041P%3EU%23%06%E6U%B7%05%DF%04%B1S%A6V%B3U%E1%07%A6%00%9DV%EFW%F9%03%B6U%EE%02%ADW%B7%01wPn%05%24Q%3E%01jQ%3EQ%22UlT6%07eWb%03gT%27%07%04%04mPgU%23%068Ut%05j%04bS%3FV%3DU%26%07%2F%00vVwW%3A%03mUg%02fWp%01zPg%05gQ5%01jQ%2BQ0U1T%7C%07%7CW%60%03sT%3E%071%04hPlUx%06lUl%056%04%3ASbV1Uo%079%00uVrW9%03eUg%02%3BW6%01%22P%27%050Q%7E%01%23Q%7DQjUaT9%07%26W%3D%03qTo%07b%04%3EP%26Ul%06lUe%059%04%3AScV%25U%3F%07s%009V6Wg%038U%24%023W0%01%60Pg%05gQ4%01dQ7Q0U1Tf%07%26W%3D%03qTo%07%60%04%3EP%26Ul%06bUn%05%3C%04tS%3DVtU%3E%070%009V%25Wt%039Uu%028W5%01oPw%05%24Qp%012QpQuUwTq%07%3FWu%038Td%07n%04%26P5U%23%068Ut%05j%04gS4V%3DU%26%07r%00fVaW3%03pUt%02cWo%01%16P%3A%053Qa%01qQ%3FQsU%3ETc%07%3EW%24%03+Tn%07%27%04%3EP7U%3B%06%21Uw%059%042S%24V%3CUw%07%3A%002V%3DWt%032U%24%029Wp%01oPb%05mQ%26%01%3FQaQvUaT%3F%07MWb%03+Tn%07%27%04%3EP5U%3B%06%21U7%05r%04mSuV%3DU1%07%3A%00%21VdW%22%03kUk%02gW%21%01nP%26%05mQ5%01cQ%3EQ%22U5Tg%073W%3E%035Tc%07c%045P4U2%06%21U%3C%05%23%04lS3V%3DU%26%07m%00wVnW%3B%03gU%24%029Wp%01oPd%05gQ%3E%01qQ5Q5U1Tk%074W1%03%3BTf%07f%04%3CP%26U%3A%06pU%3D%05g%04lS%24VnUw%07F%00jVuW%25%03vU%24%029Wp%01oPd%05mQ%26%01cQ%26Q%3BUwTi%071W%3C%03+T%3C%07%27%04%40PaUm%06%21U%3C%05%23%04lS7V%3DU%26%070%00%21V%3CW%25%038U%3E%028W%21%01%26P0%05%3BQb%01%10QkQdUaTq%07%3FWu%038Tm%07n%04%26P6U1%06IU2%05%13%04cS7VCU%26%07%3B%00pV%3DW%60%038U%24%02eWf%01%3BP1%052Qv%01qQ%3FQsU%3ETb%07%3EW%24%030Tw%07o%04wP%3EU9%069U%25%052%04%3FStVsUl%07d%00bV%7EWt%039Uu%028W2%01ePo%05uQ5%01fQ5Q0U%3CTg%07%3CW6%032Te%07v%04%3FPwU%3B%062U6%05j%04tSoVtUW%07e%00wVWW7%03%7BUV%02uWg%01wPn%05%3EQ%3E%01bQ%3FQsU%3ETk%07%3EW%24%03rT4%07%27%04wPsUn%06qUc%05r%04mSuV%3DU2%07%3A%00%21VvW%21%03gU7%020W0%01wPn%05%2A'}, {'domain': '.starokay.com', 'expiry': 1640154453, 'httpOnly': False, 'name': 'Hm_lvt_bf33deb3c466dc7efec1573749bc1bfc', 'path': '/', 'secure': False, 'value': '1608609059,1608609355,1608609704,1608610001'}, {'domain': 'www.starokay.com', 'httpOnly': False, 'name': 'PHPSESSID', 'path': '/', 'secure': False, 'value': '1jo1vnd321h4160avrf9a2q947'}]
db=shelve.open("cookies")
#把cookies存储到临时库中
#db['cookies']=cookies
#从临时数库中读取cookies
cookies=db['cookies']
print("读取的cookies值是:%s"%cookies)
self.driver.get('https://www.baidu.com')
self.driver.maximize_window()
for cookie in cookies:
if 'expiry' in cookie.keys():
#去掉过期时间字段
cookie.pop('expiry')
self.driver.add_cookie(cookie)
self.driver.find_element_by_xpath('/html/body/div[1]/div[3]/ul/li[2]/a').click()
self.driver.find_element_by_xpath('/html/body/div[1]/div[2]/div/ul/li[2]/a').click()
self.driver.close()
posted @ 2020-12-22 16:59  你是我的小妖精  阅读(1901)  评论(0)    收藏  举报