def swich_btn(self): button = self.find_element(self.swichbut_loc) action = ActionChains(self.driver) action.click_and_hold(button).perform() sleep(1) action.move_by_offset(400, 0).perform() action.reset_actions()
def move2(self, browser): """ complete actions of sliding captcha """ self.save_img(browser) self.calc_position(browser) offset = self.get_offset('./captcha/template1.jpg', './captcha/template2.jpg') print("offset calc by get_offset() is: {}".format(offset)) tracks = self.get_tracks(offset) print("the track array is: {}".format(tracks)) slider = browser.find_element_by_class_name("JDJRV-slide-btn") action = ActionChains(browser) action.click_and_hold(slider).perform() action.reset_actions() for i in tracks: action.move_by_offset(round(i), 0).perform() print('should move--<{}>--'.format(i)) print('moving--<{}>--'.format(slider.location['x'])) time.sleep(0.1) # in order to prevent accumulation actions action.reset_actions() # useful # action = ActionChains(browser) # useful time.sleep(4) action.release().perform()
def move_slider(self, gap): print("开始滑动") slider = self.wait.until( EC.presence_of_element_located((By.ID, 'test'))) while 1: action = ActionChains(self.driver) action.click_and_hold(slider).perform() action.reset_actions() # 清除之前的action track = self.get_move_track(gap) for x in track: # 只有水平方向有运动 按轨迹移动 ActionChains(self.driver).move_by_offset(xoffset=x, yoffset=0).perform() sleep(0.2) sleep(1) ActionChains(self.driver).release().perform() # 松开鼠标 sleep(5) try: alert = self.driver.find_element_by_id('test') except Exception as e: print('get alert error: %s' % e) alert = '' if alert: print(u'滑块位移需要调整: %d' % gap) if gap > 240: gap = 145 gap += 15 sleep(5) else: print('滑块验证通过') break
def open_url(self, url): options = webdriver.ChromeOptions() # 不加载图片,加快访问速度 # options.add_experimental_option("prefs", {"profile.managed_default_content_settings.images": 2}) # 此步骤很重要,设置为开发者模式,防止被各大网站识别出来使用了Selenium options.add_experimental_option('excludeSwitches', ['enable-automation']) options.add_argument('--headless') browser = webdriver.Chrome( executable_path="G:\chromedriver_win32\chromedriver.exe", options=options) wait = WebDriverWait(browser, 10) # 超时时长为10s # 打开网页 browser.get(url) try: WebDriverWait(browser, 5, 0.5).until( EC.presence_of_element_located( (By.ID, "nc_1__scale_text"))) # 等待滑动拖动控件出现 swipe_button = browser.find_element_by_xpath( '//*[@id="nc_1__scale_text"]/span') # 获取滑动拖动控件 # 模拟拽托 action = ActionChains(browser) # 实例化一个action对象 action.click_and_hold( swipe_button).perform() # perform()用来执行ActionChains中存储的行为 action.reset_actions() action.move_by_offset(580, 0).perform() # 移动滑块 except Exception as e: print('get button failed: ', e)
def contratoManutencao_Tela2(self): for i in range(2): self.callTab(i + 1) action = ActionChains(self.driver) marcador = self.driver.find_element_by_class_name("marker-label") marcador.click() time.sleep(2) action.reset_actions() contratoBox = self.driver.find_element_by_xpath( "//ul[@id='labels']//li[contains(text(),'Contrato de Manutenção')]" ) filterBox = self.driver.find_element_by_id("filter") action.drag_and_drop(contratoBox, filterBox).perform() time.sleep(2) action.reset_actions() if i == 0: conexaoBox = self.driver.find_element_by_xpath( "//ul[@id='labels']//li[contains(text(),'Conexão')]") else: conexaoBox = self.driver.find_element_by_xpath( "//ul[@id='labels']//li[contains(text(),'Comunicação')]") filterBox1 = self.driver.find_element_by_xpath( "//ul[@id='filter']//li[1]") action.drag_and_drop(conexaoBox, filterBox1).perform() time.sleep(2) closeButton = self.driver.find_element_by_xpath( "//ul[@id='filter']//li[2]//a[@href='#']") closeButton.click() time.sleep(2) self.apply()
def my_parcels(self): '''my_parcels''' browser = self.driver # 悬停到MyAccount # 登录 ese_my_account = browser.find_elements_by_xpath('//*[@class="txt"]')[1] actions = ActionChains(browser) actions.move_to_element(ese_my_account).perform() time.sleep(10) ese_sign_in = browser.find_elements_by_xpath('//*[@class="menu"]/li')[0] browser.execute_script("arguments[0].click();", ese_sign_in) time.sleep(10) ese_user_email = browser.find_elements_by_xpath('//*[@class="el-input__inner"]')[13] ese_user_email.send_keys(self.username) ese_user_pwd = browser.find_elements_by_xpath('//*[@class="el-input__inner"]')[14] ese_user_pwd.send_keys(self.password) # ese_rememberme = browser.find_elements_by_xpath('//*[@class="el-checkbox__inner"]')[1] # browser.execute_script("arguments[0].click();", ese_rememberme) ese_sign_in_btn = browser.find_elements_by_xpath('//*[@class="el-button el-button--success"]')[1] ese_sign_in_btn.click() time.sleep(10) actions.reset_actions() ese_myparcles_btn = browser.find_elements_by_xpath('//*[@class="txt"]')[1] ese_myparcles_btn.click() time.sleep(5)
def dealCheck(browser): js1 = '''Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) ''' js2 = '''window.navigator.chrome = { runtime: {}, }; ''' js3 = '''Object.defineProperty(navigator, 'languages', { get: () => ['en-US', 'en'] }); ''' js4 = '''Object.defineProperty(navigator, 'plugins', { get: () => [1, 2, 3, 4, 5,6], }); ''' browser.execute_script(js1) browser.execute_script(js2) browser.execute_script(js3) browser.execute_script(js4) time.sleep(1) while True: buttons = browser.find_elements_by_id('nc_1_n1z') if len(buttons) > 0: print("no!") action = ActionChains(browser) action.click_and_hold(buttons[0]).perform() action.reset_actions() action.move_by_offset(320, 0).perform() time.sleep(3) js1 = '''Object.defineProperties(navigator,{ webdriver:{ get: () => false } }) ''' js2 = '''window.navigator.chrome = { runtime: {}, }; ''' js3 = '''Object.defineProperty(navigator, 'languages', { get: () => ['en-US', 'en'] }); ''' js4 = '''Object.defineProperty(navigator, 'plugins', { get: () => [1, 2, 3, 4, 5,6], }); ''' browser.execute_script(js1) browser.execute_script(js2) browser.execute_script(js3) browser.execute_script(js4) else: break
def click_on(x, y, driver): xa, ya = get_adjusted_coords(x, y) action = ActionChains(driver) action.reset_actions() action.move_by_offset(xa, ya) action.click() action.perform()
def Comun(self): action2 = ActionChains(driver) WebDriverWait(driver, 120).until( EC.visibility_of_element_located((By.XPATH, "//tbody//tr[3]"))) marcador = driver.find_element_by_class_name("marker-label") marcador.click() WebDriverWait(driver, 30).until( EC.presence_of_all_elements_located( (By.XPATH, "//ul[@id='labels']"))) contratoBox2 = driver.find_element_by_xpath( "//ul[@id='labels']//li[contains(text(),'Contrato')]") contratoBox2.click() filterBox2 = driver.find_element_by_id('filter') action2.reset_actions() action2.drag_and_drop(contratoBox2, filterBox2).perform() comuBox = driver.find_element_by_xpath( "//ul[@id='labels']//li[contains(text(),'Comunicação')]") filterContratoBox2 = driver.find_element_by_xpath( "//ul[@id='filter']//li[1]//a") action2.reset_actions() action2.drag_and_drop(comuBox, filterContratoBox2).perform() close2ndBox = driver.find_element_by_xpath( "//ul[@id='filter']//li[2]//a[@href='#']") close2ndBox.click() time.sleep(2) aplicar = driver.find_element_by_xpath( "//button[contains(text(),'Aplicar')]") aplicar.click()
def login_by_qcode(): qcode = driver.find_element_by_id("J_QRCodeImg") action = ActionChains(driver) action.reset_actions() action.move_to_element(qcode) action.move_by_offset(20, -20).click() action.perform() while True: url = driver.current_url if not url.startswith("https://login.taobao.com"): cookies = driver.get_cookies() res = "" for cookie in cookies: res += cookie.get('name') + '=' + cookie.get('value') + ';' res = res[:-1] print(res) break try: refresh = driver.find_element_by_class_name("J_QRCodeRefresh") refresh.click() except: pass time.sleep(6)
def login(self, username='', password=''): username = '******' password = '******' self.brower.get('http://vbooking.ctrip.com/ivbk/accounts/login') try: self.brower.find_element_by_xpath( '//*[@id="loginpanel_container"]/div[1]/div[1]/form/dl[1]/dd/input' ).send_keys(username) sleep(2) self.brower.find_element_by_xpath( '//*[@id="loginpanel_container"]/div[1]/div[1]/form/dl[2]/dd/input' ).send_keys(password) self.brower.execute_script( 'Object.defineProperties(navigator,{webdriver:{get:() => false}});' ) status = self.brower.execute_script('window.navigator.webdriver') sleep(2) button = self.brower.find_element_by_xpath( '//*[@id="verification-code"]/div[1]/div[2]') action = ActionChains(self.brower) action.click_and_hold( button).perform() # perform()用来执行ActionChains中存储的行为 action.reset_actions() action.move_by_offset(140, 0).perform() sleep(0.2) action.move_by_offset(140, 0).perform() self.brower.find_element_by_xpath( '//*[@id="loginpanel_container"]/div[1]/div[1]/form/button' ).click() sleep(1) # 登录逻辑中保存session for cookie in self.brower.get_cookies(): self.session.cookies.set_cookie( cookielib.Cookie(version=0, name=cookie['name'], value=cookie['value'], port='80', port_specified=False, domain=cookie['domain'], domain_specified=True, domain_initial_dot=False, path=cookie['path'], path_specified=True, secure=cookie['secure'], rest={}, expires=cookie['expiry'] if "expiry" in cookie else None, discard=False, comment=None, comment_url=None, rfc2109=False)) self.session.cookies.save() return True except Exception as e: print("登录失败", e) return False
def Simulated_sliding(self, element): button = self.driver.find_element_by_id(element) # 找到“蓝色滑块” action = ActionChains(self.driver) # 实例化一个action对象 action.click_and_hold( button).perform() # perform()用来执行ActionChains中存储的行为 action.reset_actions() action.move_by_offset(260, 0).perform() # 移动滑块 Web_test_login.wait_element(self, "class", "nc_iconfont btn_ok")
def test_splider(driver): splider = driver.find_element_by_xpath( '''(//div//div[@class="el-tooltip el-slider__button"])[last()-5]''') action = ActionChains(driver) action.drag_and_drop_by_offset(splider, -100, 0).perform() time.sleep(2) action.reset_actions() action.drag_and_drop_by_offset(splider, 100, 0).perform()
def move_element(self, by, locate): element = self.find_element(by,locate) actions = ActionChains(BasePage()._driver) actions.click_and_hold(element).perform() for index in range(200): actions.move_by_offset(2,0).perform() actions.reset_actions() sleep(0.1)
def get_infos(self): list_info = [] # total_page = self.get_total_page() total_page = 30 for i in range(1,int(total_page)): #等待页面商品数据加载完成 goods_total = self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#mainsrp-itemlist > .m-itemlist > .g-clearfix > .items'))) #获取本页面源代码 html = self.browser.page_source #pq模块解析网页源代码 doc = pq(html) #取出淘宝商品数据 good_items = doc('.m-itemlist .grid .items .item').items() #遍历该页所有的商品 for item in good_items: good_title = item.find('.title').text().replace('\n', "").replace('\r', "") good_price = item.find('.price').text().replace('\n','').replace('\r','') good_sales_num = item.find('.deal-cnt').text() good_shop = item.find('.shop').text() #print(str(good_title) + str(good_price) + str(good_sales_num) + str(good_shop)) list_info.append([good_title,good_price,good_sales_num,good_shop]) # 模拟向下滑动 self.swipe_down(2) #下一页 self.next_page(i+1) time.sleep(2) #等待滑块验证码出现,超时时间为5s,每0.5s检查一下 #检测是否出现滑块验证,若出现则解决 #等待滑块加载完成 #WebDriverWait(self.browser, 5 ,0.5,ignored_exceptions=TimeoutError).until(EC.presence_of_element_located((By.CSS_SELECTOR,'.nc_iconfont'))) try: #打印源码发现滑块源码并没有出现在当前源码中 print(pq(self.browser.page_source)) #尝试着切换一下frame到iframe,看一看能不能获得滑块源码 self.browser.switch_to.frame(self.wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#J_sufei > iframe')))) swipe_button = self.browser.find_element_by_id('nc_1_n1z') print(swipe_button) action = ActionChains(self.browser) action.click_and_hold(swipe_button)#perform用来执行ActionChains中存储的行为 action.move_by_offset(580,0).perform()#移动滑块 #action.drag_and_drop_by_offset(swipe_button, 400, 0).perform() action.reset_actions() except Exception : print('get swipe_button failed', Exception) return list_info
def crawl_good_data(self): url="https://curve.taobao.com/search.htm?" # 遍历所有页数 for page in range(1,47): furl=url+'pageNo='+str(page) self.browser.get(furl) sleep(5) # 等待该页面全部商品数据加载完毕 # 打印当前页 print("当前页数" +str(page)) # 获取本页面源代码 html = self.browser.page_source # pq模块解析网页源代码 doc = pq(html) # 存储天猫商品数据 good_items = doc('#J_ShopSearchResult .item').items() # 遍历该页的所有商品 for item in good_items: good_title = item.find('.item-name').text().replace('\n',"").replace('\r',"") good_status = item.find('.sale-area').text().replace(" ","").replace("笔","").replace('\n',"").replace('\r',"") good_price = item.find('.cprice-area').text().replace("¥", "").replace(" ", "").replace('\n', "").replace('\r', "") good_url = item.find('.item-name').attr('href') print(good_title + "@" + good_status + "@" + good_price + "@" + good_url + '\n') # 精髓之处,大部分人被检测为机器人就是因为进一步模拟人工操作 # 模拟人工向下浏览商品,即进行模拟下滑操作,防止被识别出是机器人 self.swipe_down(2) # 等待滑动验证码出现,超时时间为5秒,每0.5秒检查一次 # 大部分情况不会出现滑动验证码,所以如果有需要可以注释掉下面的代码 sleep(5) # WebDriverWait(self.browser, 5, 0.5).until(EC.presence_of_element_located((By.ID, "nc_1_n1z"))) #等待滑动拖动控件出现 try: swipe_button = self.browser.find_element_by_id('nc_1_n1z') #获取滑动拖动控件 #模拟拽托 action = ActionChains(self.browser) # 实例化一个action对象 action.click_and_hold(swipe_button).perform() # perform()用来执行ActionChains中存储的行为 action.reset_actions() action.move_by_offset(580, 0).perform() # 移动滑块 except Exception as e: print ('get button failed: ', e)
def normal_drag(dis): # 滑块验证 /html/body/div[4]/div/div/div/div[2]/div[3] slider = chrome.find_element_by_xpath("/html/body/div[4]/div/div/div/div[2]/div[3]") # slider=chrome.find_element_by_class_name(r"JDJRV-slide-inner JDJRV-slide-btn")# 找到“蓝色滑块” action = ActionChains(chrome) # 实例化一个action对象 action.click_and_hold(slider).perform() # perform()用来执行ActionChains中存储的行为 action.reset_actions() action.move_by_offset(dis*0.7714, 0).perform() # 移动滑块 action.release().perform()
def slide_solution1(slide_btn, driver): action = ActionChains(driver) action.click_and_hold(slide_btn).perform() for i in range(200): try: action.move_by_offset(i * 2, 0).perform() except: break action.reset_actions() time.sleep(0.1)
def click_move_mouse(self, loc1, img_doc1): """ 点击移动鼠标 :return: """ tab = ActionChains(self.driver) hua1 = self.get_element(loc1, img_doc1) # 获取滑动按钮 tab.click_and_hold(hua1).perform() tab.reset_actions() tab.move_by_offset(338, 0).perform() # 使用随机数确定滑动位置后滑动
def write_title(title): title_field = driver.find_element_by_css_selector('.se-placeholder.__se_placeholder.se-ff-nanumgothic.se-fs32') action = ActionChains(driver) ( action.move_to_element(title_field) .pause(1) .click() .send_keys(title) .perform() ) action.reset_actions()
def test_splider2(driver): time.sleep(1) splider = driver.find_element_by_xpath(''' //label[text()="竖向选择"]/../div//div[@class="el-tooltip el-slider__button"] ''') action = ActionChains(driver) action.drag_and_drop_by_offset(splider, 0, 90).perform() action.reset_actions() time.sleep(2) action.drag_and_drop_by_offset(splider, 0, -90).perform() action.reset_actions()
def register(): USER = "******" PASSWORD = "******" # 用于登陆淘宝,并且保存Cookies browser = webdriver.Chrome() # 淘宝对selenium的识别主要是通过navigator.webdriver,使用selenium的浏览器api显示的是True,所有我们改成FALSE就可以过淘宝的检测 browser.execute_script("Object.defineProperties(navigator,{webdriver:{get:() => false}})") browser.get('https://login.taobao.com/member/login.jhtml') try: #browser.switch_to.frame(1) wait = WebDriverWait(browser, 10) input = wait.until(EC.presence_of_element_located((By.ID, 'J_Quick2Static'))) input.click() # 切换到密码登陆 except Exception as e: print("直接输入登陆") # 切换到支付宝登陆 # ali = browser.find_element(By.CLASS_NAME, 'alipay-login') # ali.click() # aliloggoin = browser.find_element(By.CSS_SELECTOR, '#J-loginMethod-tabs > li:nth-child(2)') # aliloggoin.click() uesr = browser.find_element(By.ID, 'TPL_username_1') # 账号输入框 password = browser.find_element(By.ID, 'TPL_password_1') # 密码输入框 uesr.send_keys(USER) # 输入密码 time.sleep(random.random() * 2) # 暂停 password.send_keys(PASSWORD) # 输入账号 time.sleep(random.random() * 2) # 暂停 try: browser.switch_to.frame(browser.find_element(By.ID, '_oid_ifr_')) browser.switch_to.default_content() # 滑块出现 loggin = browser.find_element(By.ID, 'nc_1_n1z') action = ActionChains(browser) action.click_and_hold(loggin).perform() action.reset_actions() action.move_by_offset(285, 0).perform() # 输入账号密码后会有一个滑动验证 time.sleep(random.random() * 1) except Exception as e: print("滑动滑块") button = browser.find_element(By.ID, 'J_SubmitStatic') # 登录按钮 button.click() time.sleep(random.random() * 2) cookie = browser.get_cookies() list = {} # scrapy携带的cookies需要字典类型的 for cookiez in cookie: name = cookiez['name'] value = cookiez['value'] list[name] = value if len(list) > 10: break else: browser.close() return browser, list
def send_emoji_message(self, emoji, message): message_field = self.browser.find_element_by_css_selector( self.message_input_selector) message_field.clear() message_field.click() emoji = EmojiAlphabet(emoji) # Since we have only uppercase emoji alphabets # converting the message to uppercase. message = message.upper() for m in message: emoji_generator = { 'A': emoji.A, 'B': emoji.B, 'C': emoji.C, 'D': emoji.D, 'E': emoji.E, 'F': emoji.F, 'G': emoji.G, 'H': emoji.H, 'I': emoji.I, 'J': emoji.J, 'K': emoji.K, 'L': emoji.L, 'M': emoji.M, 'N': emoji.N, 'O': emoji.O, 'P': emoji.P, 'Q': emoji.Q, 'R': emoji.R, 'S': emoji.S, 'T': emoji.T, 'U': emoji.U, 'V': emoji.V, 'W': emoji.W, 'X': emoji.X, 'Y': emoji.Y, 'Z': emoji.Z, ' ': emoji.heart, } emoji_pieces = emoji_generator[m]() for e in emoji_pieces: # Todo # Show percentage of work done/ emojis sent. message_field.send_keys(e) actions = ActionChains(self.browser) actions.key_down( Keys.SHIFT ).send_keys(Keys.ENTER).key_up(Keys.SHIFT).perform() actions.reset_actions() message_field.send_keys(Keys.ENTER)
def login(): seed_url = 'https://www.taobao.com' driver = webdriver.Firefox() driver.get(seed_url) # 跳转到登录页面 driver.find_element_by_css_selector('div.site-nav-sign a.h').click() time.sleep(1) # 切换为'密码登录' driver.find_element_by_css_selector('div#J_QRCodeLogin.qrcode-login div.login-links a.forget-pwd.J_Quick2Static').click() # input username driver.find_element_by_css_selector('input#TPL_username_1').clear() driver.find_element_by_css_selector('input#TPL_username_1').send_keys('进入无愁') time.sleep(5) # input password driver.find_element_by_css_selector('input#TPL_password_1').clear() driver.find_element_by_css_selector('input#TPL_password_1').send_keys('wo198612') time.sleep(3) # 点击登录按钮 driver.find_element_by_css_selector('button#J_SubmitStatic.J_Submit').click() driver.find_element_by_css_selector('input#TPL_password_1').clear() driver.find_element_by_css_selector('input#TPL_password_1').send_keys('wo198612') while True: button = driver.find_element_by_id('nc_1_n1z') # 找到“蓝色滑块” time.sleep(1) action = ActionChains(driver) # 实例化一个action对象 action.click_and_hold(button).perform() # perform()用来执行ActionChains中存储的行为 time.sleep(1) action.reset_actions() action.move_by_offset(258, 0).perform() # 移动滑块 time.sleep(5) try: result_fail = driver.find_element_by_css_selector('div#nocaptcha.nc-container.tb-login div.errloading span.nc-lang-cnt a') result_fail.click() except NoSuchElementException: pass try: result_success = driver.find_element_by_css_selector('div#nc_1__scale_text.scale_text.nc-align-center.scale_text2 span.nc-lang-cnt b') break except NoSuchElementException: pass time.sleep(1) #等待停顿时间 driver.find_element_by_css_selector('button#J_SubmitStatic.J_Submit').click() print(driver.page_source)
def process_request(self, request, spider): if not self.is_logined: # 打开登录页面,实现登录 self.chrome.get('https://www.qichacha.com/user_login') ui.WebDriverWait(self.chrome, 30).until( EC.visibility_of_all_elements_located( (By.CLASS_NAME, 'login-panel'))) self.chrome.find_element_by_css_selector( '.login-panel-head div:nth-child(2) a').click() self.chrome.find_element_by_id('nameNormal').send_keys( '17791692095') self.chrome.find_element_by_id('pwdNormal').send_keys('disen666') # 处理滑动问题 slide_span = self.chrome.find_element_by_css_selector( '#dom_id_one span') slide_div = self.chrome.find_element_by_css_selector('#dom_id_one') actions = ActionChains(self.chrome) actions.click_and_hold(slide_span).perform() actions.reset_actions() print(slide_div.rect) width = slide_div.rect['width'] # 348 offset = round(width / 10, 2) for cnt in range(1, 11): # 1,...10 actions.move_by_offset(offset * cnt, 0).perform() time.sleep(0.05) actions.reset_actions() self.chrome.find_element_by_css_selector('.login-btn').click() self.is_logined = True time.sleep(10) self.chrome.get(request.url) if request.url.find('/firm_') == -1: ui.WebDriverWait(self.chrome, 30).until( EC.visibility_of_all_elements_located( (By.CLASS_NAME, 'pills-after'))) else: ui.WebDriverWait(self.chrome, 30).until( EC.visibility_of_all_elements_located((By.ID, 'Cominfo'))) html = self.chrome.page_source # str return HtmlResponse(request.url, body=html.encode('utf-8'), request=request)
def move_slider(self, slider, distance): distance += 13 action = ActionChains(self.driver) action.click_and_hold(slider).perform() action.reset_actions() # 清除之前的action track = self.get_track(distance) for i in track: action.move_by_offset(xoffset=i, yoffset=0).perform() action.reset_actions() sleep(0.5) action.release().perform() sleep(1)
def _scroll(self, driver, offset): ''' 拖动滑块 :param driver: :param offset: 拖动的距离 :return: ''' button = driver.find_element(*self.scroll_btn) action = ActionChains(driver) action.click_and_hold(button).perform() action.reset_actions() action.move_by_offset(offset, 0).perform()
def slider_check(self, url): self._driver.get(self.domain + url) time.sleep(3) # 滑块处理 nc_1_n1z action = ActionChains(self._driver) button = self._driver.find_element_by_id('nc_1_n1z') action.reset_actions() # 清除之前的action action.click_and_hold(button).perform() distance = 300 track = self._get_track(distance) for i in track: action.move_by_offset(xoffset=i, yoffset=0) action.perform()
def move_slide(self): iframe = self.browser.find_element_by_xpath( '//iframe') # 找到“嵌套”的iframe self.browser.switch_to.frame(iframe) # 切换到iframe btn_slide = self.browser.find_element_by_xpath( '//span[@class="nc_iconfont btn_slide"]') action = ActionChains(self.browser) # 实例化一个action对象 action.click_and_hold( btn_slide).perform() # perform()用来执行ActionChains中存储的行为 action.reset_actions() action.move_by_offset(256, 0).perform() # 移动滑块 time.sleep(3)
def write_content(content): content_field = driver.find_element_by_css_selector('.se-component.se-text.se-l-default') content_field.click() action = ActionChains(driver) ( action.move_to_element(content_field) .pause(1) .click() .send_keys(content) .perform() ) action.reset_actions()