def setAge(driver): draggable_element = driver.find_element_by_css_selector("svg > circle:nth-of-type(2)") actions = ActionChains(driver) x = random.randint(-80, 80) y = random.randint(0, 170) actions.drag_and_drop_by_offset(draggable_element, x, y) actions.perform()
def test1(self): baseUrl = "https://jqueryui.com/slider/" # driver = webdriver.Firefox() # driver.maximize_window() # driver.get(baseUrl) driverLocation = "/Users/harisrizwan/Selenium/chrome/chromedriver" os.environ["chrome.driver"] = driverLocation driver = webdriver.Chrome(driverLocation) driver.implicitly_wait(5) driver.maximize_window() driver.get(baseUrl) driver.switch_to.frame(0) Slider = driver.find_element(By.XPATH,"//div[@id='slider']//span") time.sleep(3) try: actions = ActionChains(driver) actions.drag_and_drop_by_offset(Slider, 85, 0).perform() except: print("sliding failed") time.sleep(4)
def try_login(): """尝试登录""" try: url = 'https://s.taobao.com/search?q=' + quote(KEYWORD) browser.get(url) login = browser.find_element_by_id('fm-login-id') login.clear() login.send_keys('username') time.sleep(1) password = browser.find_element_by_id('fm-login-password') password.clear() password.send_keys('password') time.sleep(1) source = browser.find_element_by_id('nc_1_n1z') # target = browser.find_element_by_id('nc_1_n1t') actions = ActionChains(browser) # actions.drag_and_drop(source, target) actions.drag_and_drop_by_offset(source, 258, 0) actions.perform() time.sleep(1.5) button = browser.find_element_by_class_name('fm-btn') button.click() time.sleep(1) print("登录成功") except Exception as reason: print("登录失败:" + str(reason))
def scroll_tc_box(self, driver): 'Get Scroller element' scroller = self.get_scroller_element(driver) print(datetime.now()) 'Get Accept element' accept_element = self.get_accept_element(driver) 'Scroll T & C' for i in range(188): print("Scrolling T & C, Please wait", i) actions = None actions = ActionChains(driver) 'Drag and Drop Scroller element to offset provided' for j in range(3): actions.drag_and_drop_by_offset(scroller, 0, 100).perform() self.common_utility.close_alert(driver) 'Click Send to bottom to close help box and wait till it closes' self.click_send_to_bottom_element(driver) time.sleep(12) 'Click Accept Button' self.common_utility.close_alert(driver) result = self.common_utility. \ web_element_action(driver,accept_element, "click", "", "accept_element") return result
def test1(self): driver = None try: baseUrl = "https://jqueryui.com/slider/" driver = webdriver.Firefox() driver.maximize_window() driver.get(baseUrl) driver.implicitly_wait(3) driver.switch_to.frame(0) element = driver.find_element(By.XPATH, "//div[@id='slider']//span") time.sleep(2) try: actions = ActionChains(driver) actions.drag_and_drop_by_offset(element, 100, 0).perform() print("Sliding Element Successful") time.sleep(2) except: print("Sliding failed on element") except: print("Inside Error") finally: driver.quit()
def handle_driver(driver, ac1): dr = ActionChains(driver) dr.move_to_element(ac1).click_and_hold(ac1).perform() time.sleep(2.5) dr.move_by_offset(573, 381).perform() time.sleep(0.3) file_name = 'bi.png' driver.save_screenshot(file_name) # dr.release().perform() driver.save_screenshot('bi2.png') im = Image.open(file_name) box = (562, 224, 822, 340) region = im.crop(box) # region.show() file_cut = 'cut.png' region.save(file_cut) time.sleep(1) move_num = handl.scan_img(file_cut) print move_num # ActionChains(driver).drag_and_drop_by_offset(ac1, move_num-7, 0).perform() # time.sleep(1) # dr.move_to_element(ac1).perform() driver.save_screenshot('bi3.png') dr.move_by_offset(0, 768).release().perform() driver.save_screenshot('biok.png') time.sleep(1) driver.save_screenshot('biok2.png') dr.drag_and_drop_by_offset(ac1, 0, move_num-7).perform() driver.save_screenshot('biok3.png') driver.quit()
def testMethod(self): #opt = webdriver.ChromeOptions() #opt.add_argument("user-data-dir=C:\\Users\\Arkus\\AppData\\Local\\Google\\Chrome\\User Data\\Default") baseUrl = "https://jqueryui.com/slider/" # Instantiate the FF browser command driver = webdriver.Chrome()#options=opt) # Window maximize driver.maximize_window() # Open the provided URL driver.get(baseUrl) driver.implicitly_wait(5) hw = handyWrappers(driver) driver.switch_to.frame(0) time.sleep(2) Slider = hw.getElement("//div[@id='slider']//span","xpath") try: actions = ActionChains(driver) actions.drag_and_drop_by_offset(Slider,100,0).perform() print("Sliding element successful") time.sleep(2) print("Item clicked") except: print("Sliding failed on element") # Idle and Close time.sleep(5) driver.quit()
def run(): selector = etree.HTML(res) urls = re.findall( r'<a onclick="utLoginInterceptor.*? href="(.*?)" target="_blank" class="ma_h1"', res, re.S) # 匹配url try: print('识别出滑动界面') url_fail = re.findall("<script>window.location.href='(.*?)';</script>", res, re.S) url_fail = url_fail[0] # driver.maximize_window() time.sleep(3) driver.get(url_fail) time.sleep(2) print('开始滑动') # 滑动条定位 start = driver.find_element_by_xpath( '//div[@id="nc_1__scale_text"]/span') # 长按拖拽 action = ActionChains(driver) # 长按 action.click_and_hold(start).perform() # 拉动 action.drag_and_drop_by_offset(start, 400, 0).perform() time.sleep(3) except Exception as e: for url in urls: url_new = 'https://www.qcc.com/' + url print(url_new) print('*' * 100)
def test_toggle_snap(graph_cases, snap): """ :type graph_cases: qmxgraph.tests.conftest.GraphCaseFactory """ graph = graph_cases('1v') selenium = graph.selenium # If snap is enabled, it should move to closest grid block (which are # always multiples of 10, as 10 is grid size). By default snap is enabled. if not snap: selenium.execute_script("api.toggleSnap()") vertex = graph.get_vertex() x, y = graph.get_vertex_position(vertex) w, h = graph.get_vertex_size(vertex) actions = ActionChains(selenium) actions.move_to_element(vertex) actions.move_by_offset(w / 2., h / 2.) actions.drag_and_drop_by_offset(None, 66, 66) actions.perform() vertex = graph.get_vertex() def expected(v): result = v + 66 if snap: result = math.ceil(result / 10.) * 10 return result assert int(vertex.get_attribute('width')) == w assert int(vertex.get_attribute('height')) == h assert int(vertex.get_attribute('x')) == expected(x) assert int(vertex.get_attribute('y')) == expected(y)
def test(self): # SETUP driver = webdriver.Firefox() driver.maximize_window() BaseURL = "https://jqueryui.com/slider/" driver.get(BaseURL) driver.implicitly_wait(3) # Switch to iframe driver.switch_to.frame(0) # Find element slider_path = "//div[@id='slider']/span" slider = driver.find_element(By.XPATH, slider_path) # perform actions try: actions = ActionChains(driver) actions.drag_and_drop_by_offset(slider, 100, 0).perform() time.sleep(3) except: print('HAHA! something went wrong bitch') driver.quit()
def test_puzzle2(self): driver = self.driver driver.implicitly_wait(2) driver.get( "https://ide.bellcode.com/puzzle2?pid=263&actid=3254&classid=439&package_id=69&lessonid=294&cburl=https%3A%2F%2Fwww.bellcode.com%2F%23%2Fcm%2Fstu_lesson_map%2F%3Fpackage_id%3D69%26lesson_id%3D294%26class_id%3D439" ) time.sleep(5) driver.find_element_by_link_text(u"跳过").click() when_click = driver.find_element_by_css_selector( '#blocks > div.injectionDiv > svg.blocklySvg > g > g.blocklyBlockCanvas' ) move = driver.find_element_by_css_selector( '#blocks > div.injectionDiv > svg.blocklyFlyout > g > g.blocklyBlockCanvas > g' ) # fail。。。。↓ # number = driver.find_element_by_xpath("//*[@id='blocks']/div[1]/*[name()='svg'][4]/*[name()='g']/*[name()='g'][1]/*[name()='g']/*[name()='g'][2]/*[name()='g']") # # number.click() # print (number.text) # number.send_keys("100") when_click_xy = when_click.location move_xy = move.location action = ActionChains(driver) action.drag_and_drop_by_offset(move, when_click_xy['x'], when_click_xy['y']) action.perform() time.sleep(10) # action.release(move) print(when_click_xy, move_xy)
def test_search_in_python_org(self): driver = self.driver driver.implicitly_wait(10) actions = ActionChains(driver) driver.get("http://localhost:8080") ens = driver.find_element_by_class_name('ens') ens.click() menu = driver.find_element_by_id('VIZ_popup_menu') buttons = driver.find_elements_by_css_selector('#VIZ_popup_menu button') for button in buttons: text = button.get_attribute('textContent') if text == 'Value': button.click() break graph = driver.find_element_by_css_selector(".graph") actions.drag_and_drop_by_offset(graph, xoffset=-15, yoffset=15).perform() play_button = driver.find_element_by_id('VIZ.SimControl.play_button') play_button.click() time.sleep(3) line = driver.find_element_by_css_selector("path.line:nth-child(1)") data = line.rect print data test_val = data['height'] + data['width'] assert test_val != 0 block = driver.find_element_by_id("BlockTestCompletion")
def test1(): driver = webdriver.Chrome(r"F:\automation_git\FormTalk\WebTEST\main\drivers\chromedriver.exe") driver.get("https://testpro.formtalk.net/login.do") driver.maximize_window() driver.find_element_by_css_selector("input[name=loginName]").send_keys("17111111111") time.sleep(1) driver.find_element_by_css_selector('input[name=loginPassword]').send_keys("123456") time.sleep(1) action = ActionChains(driver) SliderVerifyCodeIcon = driver.find_element_by_css_selector("span.verifyCode-icon") action.drag_and_drop_by_offset(SliderVerifyCodeIcon, driver.find_element_by_css_selector(("span.labelTip")).size["width"], 0).perform() action.release().perform() action.move_to_element(SliderVerifyCodeIcon).release() """登录""" time.sleep(1) driver.find_element_by_css_selector('input#doLogin').click() time.sleep(10) driver.switch_to.default_content() driver.find_element_by_css_selector("div[title=自动化应用准备1_新版]").click() time.sleep(2) driver.switch_to.frame(driver.find_element_by_css_selector("#iframeUseApp")) driver.switch_to.frame(driver.find_element_by_css_selector("#app-main-iframe")) driver.find_element_by_css_selector("button.form-udata-add-span.btns-info").click() driver.switch_to.window(driver.window_handles[-1]) driver.switch_to.window(driver.window_handles[0]) print("切换成功") time.sleep(15)
def test_search_in_python_org(self): driver = self.driver driver.implicitly_wait(10) actions = ActionChains(driver) driver.get("http://localhost:8080") ens = driver.find_element_by_class_name('ens') ens.click() menu = driver.find_element_by_id('VIZ_popup_menu') buttons = driver.find_elements_by_css_selector( '#VIZ_popup_menu button') for button in buttons: text = button.get_attribute('textContent') if text == 'Value': button.click() break graph = driver.find_element_by_css_selector(".graph") actions.drag_and_drop_by_offset(graph, xoffset=-15, yoffset=15).perform() play_button = driver.find_element_by_id('VIZ.SimControl.play_button') play_button.click() time.sleep(3) line = driver.find_element_by_css_selector("path.line:nth-child(1)") data = line.rect print data test_val = data['height'] + data['width'] assert test_val != 0 block = driver.find_element_by_id("BlockTestCompletion")
def test_can_move_block_from_one_container_to_another(live_server, browser, admin_user): page = factories.FancyPageFactory(node__name='Home') main_container = page.containers.all()[0] layout = factories.TwoColumnLayoutBlockFactory(container=main_container) browser.visit(live_server.url + page.get_absolute_url()) right = layout.containers.get(name='right-container') left = layout.containers.get(name='left-container') moving_block = factories.TextBlockFactory(container=right) factories.TextBlockFactory(container=right) factories.TextBlockFactory(container=left) browser.visit(live_server.url + page.get_absolute_url()) browser.find_by_css('#editor-handle').first.click() source = browser.find_by_css('#block-{} div.move'.format( moving_block.uuid)).first chain = ActionChains(browser.driver) chain.drag_and_drop_by_offset(source._element, -600, 200).perform() time.sleep(5) assert right.blocks.count() == left.blocks.count() == 1 assert main_container.blocks.count() == 2 main_block_ids = [b.uuid for b in main_container.blocks.all()] assert main_block_ids == [layout.uuid, moving_block.uuid]
def test_can_move_block_from_one_container_to_another(live_server, browser, admin_user): page = factories.FancyPageFactory(node__name='Home') main_container = page.containers.all()[0] layout = factories.TwoColumnLayoutBlockFactory(container=main_container) browser.visit(live_server.url + page.get_absolute_url()) right = layout.containers.get(name='right-container') left = layout.containers.get(name='left-container') moving_block = factories.TextBlockFactory(container=right) factories.TextBlockFactory(container=right) factories.TextBlockFactory(container=left) browser.visit(live_server.url + page.get_absolute_url()) browser.find_by_css('#editor-handle').first.click() source = browser.find_by_css( '#block-{} div.move'.format(moving_block.uuid)).first chain = ActionChains(browser.driver) chain.drag_and_drop_by_offset(source._element, -600, 200).perform() time.sleep(5) assert right.blocks.count() == left.blocks.count() == 1 assert main_container.blocks.count() == 2 main_block_ids = [b.uuid for b in main_container.blocks.all()] assert main_block_ids == [layout.uuid, moving_block.uuid]
def drag_element_by_offset_class_name(browser, className, index, rightOrLeft, offset): elements = find_elements_by_class(browser, className) action_chains = ActionChains(browser) if str(rightOrLeft) == "left": action_chains.drag_and_drop_by_offset(elements[int(index) - 1], -int(offset), 0).perform() else: action_chains.drag_and_drop_by_offset(elements[int(index) - 1], int(offset), 0).perform()
def index_page(page): print("正在爬取第", page, "页") try: browser.get("https://s.taobao.com/search?q=" + quote(ShopName)) try: slider2 = browser.find_element_by_css_selector( "#nc_1__scale_text span.nc-lang-cnt") action2 = ActionChains(browser) action2.drag_and_drop_by_offset(slider2, 500, 0).perform() time.sleep(5) except Exception as e: pass input = wait.until( EC.presence_of_element_located( (By.CSS_SELECTOR, "#mainsrp-pager div.form > input"))) submit = wait.until( EC.element_to_be_clickable( (By.CSS_SELECTOR, "#mainsrp-pager div.form > span.btn.J_Submit"))) input.clear() input.send_keys(page) submit.click() wait.until( EC.text_to_be_present_in_element( (By.CSS_SELECTOR, "#mainsrp-pager li.item.active > span"), str(page))) wait.until( EC.presence_of_element_located( (By.CSS_SELECTOR, ".m-itemlist .items .item"))) get_products() except TimeoutException: index_page(page)
def login(): options = Options() # 不能隐藏浏览器,会被检测到,要求登入账号 # options.add_argument('--headless') # options.add_argument('--disable-gpu') # options.add_argument( # '--user-agent="Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36"') # driver = selenium.webdriver.Chrome(options=options) # 等待时间 # driver.implicitly_wait(5) # driver.delete_all_cookies() # 实例化driver driver = webdriver.Chrome() # driver = webdriver.Firefox() # driver.maximize_window() time.sleep(3) driver.get('https://www.qcc.com') time.sleep(3) try: # 页面一直循环,直到 id="myDynamicElement" 出现 print(1) element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "myDynamicElement"))) finally: # 去除介绍界面,进入登录界面 driver.find_element_by_class_name("tep1").click() time.sleep(3) # driver.find_element_by_xpath('//div[@class="login-panel-head clearfix"]/div[2]').click() # 选择密码登录模式 driver.find_element_by_id("normalLogin").click() time.sleep(5) # 输入帐号密码 driver.find_element_by_id("nameNormal").send_keys("13536020881") time.sleep(3) driver.find_element_by_id("pwdNormal").send_keys("123456789") time.sleep(3) # 滑动条定位 start = driver.find_element_by_xpath( '//div[@id="nc_2__scale_text"]/span') # 长按拖拽 action = ActionChains(driver) # 长按 action.click_and_hold(start) # 拉动 action.drag_and_drop_by_offset(start, 308, 0).perform() time.sleep(3) # 登录 driver.find_element_by_xpath( '//form[@id="user_login_normal"]/button').click() time.sleep(2) # 获取cookies cookies = {i["name"]: i["value"] for i in driver.get_cookies()} print(cookies)
def login(name, password): """ 登陆 """ url = "https://login.taobao.com/member/login.jhtml" browser.get(url) try: browser.find_element_by_css_selector("div.login-switch #J_Quick2Static").click() except Exception as excep: print(excep) # 输入用户名密码 browser.find_element_by_id("TPL_username_1").send_keys(name) browser.find_element_by_id("TPL_password_1").send_keys(password) time.sleep(1) try: # 拖动滑块 slider = browser.find_element_by_css_selector("#nc_1_n1z") action = ActionChains(browser) action.drag_and_drop_by_offset(slider, 500, 0).perform() time.sleep(3) except Exception as excep: print(excep) time.sleep(2) browser.find_element_by_id("J_SubmitStatic").click() return
def test(self): #for firefox at first we have to show the path where is the Geckodriver located #we set a variable "driverlocation" which will store the driver path driverlocation = "/usr/local/bin/gecko_driver/geckodriver" #now instantiate the firefox browser with the parameter of driver location driver = webdriver.Firefox(executable_path=driverlocation) # At first maximize the window driver.maximize_window() # Open The Provided URL with driver.get method baseURL = "http://www.jqueryui.com/droppable" driver.get(baseURL) # wait until the browser is fully loaded by implicitly_wait method driver.implicitly_wait(3) # At first switch to the iframe where is the drag and drop element located driver.switch_to.frame(0) element = driver.find_element(By.XPATH, "//div[@id='slider']//span") time.sleep(2) try: # for actions like mouse hovering we have to use selenium method Action Chains actions = ActionChains( driver ) # here actions is the object we created from the class ActionChains # For every actions we have to run move to element method and perform the action actions.drag_and_drop_by_offset(element, 100, 0).perform() print("Sliding Element Successfully") time.sleep(2) except: print("Sliding failed on element")
def drag_element_by_offset_class_name(browser, className, index, rightOrLeft, offset): elements = find_elements_by_class(browser, className) action_chains = ActionChains(browser) if str(rightOrLeft) == "left": action_chains.drag_and_drop_by_offset(elements[int(index) - 1], -int(offset), 0).perform() else: action_chains.drag_and_drop_by_offset(elements[int(index) - 1], int(offset), 0).perform()
def test_dragPageElement(self): url = "http://jqueryui.com/resources/demos/draggable/scroll.html" # 访问被测试网页 self.driver.get(url) # 获取页面上第一个能拖拽的页面元素 initialPosition = self.driver.find_element_by_id("draggable") # 获取页面上第二个能拖拽的页面元素 targetPosition = self.driver.find_element_by_id("draggable2") # 获取页面上第三个能拖拽的页面元素 dragElement = self.driver.find_element_by_id("draggable3") # 导入提供拖拽元素方法的模块ActionChains from selenium.webdriver import ActionChains import time ''' 创建一个新的ActionChains,将webdriver实例对象driver作为参数值传入 然后通过WebDriver实例执行用户动作。 ''' action_chains = ActionChains(self.driver) # 将页面上第一个能被拖拽的元素拖拽到第二个元素位置 action_chains.drag_and_drop(initialPosition, targetPosition).perform() # 将页面上第三个能拖拽的元素,向右下拖动10个像素,共拖动5次 for i in xrange(5): action_chains.drag_and_drop_by_offset(dragElement, 10, 10).perform() time.sleep(2)
def test_success(self): """ Testing a simple karel program made in blockly window. Becouse multiple modules are tested this could be regarded as integration test. """ self.driver.get(self.host + "/index.html") self.driver.execute_script('window.localStorage.clear();') actionChains = ActionChains(self.driver) actionChains2 = ActionChains(self.driver) actionChains3 = ActionChains(self.driver) actionChains4 = ActionChains(self.driver) #going into blockly window rb = self.driver.find_element_by_class_name("blockly-button") self.assertIsNotNone(rb) rb.click() #selecting and draging "move" piece on to the canvas karel = self.driver.find_element_by_id(":1") self.assertIsNotNone(karel) karel.click() getBlocklyElement(self, 0) piece = self.driver.find_element_by_class_name("blocklySelected") actionChains.drag_and_drop_by_offset(piece, 100, 0).perform() #selecting and draging "move" piece on to the canvas karel.click() getBlocklyElement(self, 0) piece = self.driver.find_element_by_class_name("blocklySelected") actionChains2.click_and_hold(piece).perform() actionChains2.move_by_offset(100, 12).release(piece).perform() #selecting and draging "move" piece on to the canvas karel.click() getBlocklyElement(self, 0) piece = self.driver.find_element_by_class_name("blocklySelected") actionChains3.click_and_hold(piece).perform() actionChains3.move_by_offset(100, 12).release(piece).perform() #selecting and draging "pickup" piece on to the canvas karel.click() getBlocklyElement(self, 3) piece = self.driver.find_element_by_class_name("blocklySelected") actionChains4.click_and_hold(piece).perform() actionChains4.move_by_offset(100, -75).release(piece).perform() #going back to karel back = self.driver.find_elements_by_class_name("btn-primary")[1] self.assertIsNotNone(back) back.click() #running program run = self.driver.find_element_by_class_name("run-button") self.assertIsNotNone(run) run.click() #checking if the program finished successfully self.assertIsNotNone(self.driver.find_element_by_class_name("alert-success"))
def test_search_in_python_org(self): driver = self.driver action_chains = ActionChains(driver) driver.get("http://localhost:8080") graph_elements = driver.find_elements_by_class_name("graph") for e in graph_elements: action_chains.drag_and_drop_by_offset(e, xoffset=2, yoffset=2).perform()
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 drug_and_drop(self, selector, selector_type='xpath', x=0, y=0): if 'get' in dir(self.webdriver): st = self._get_selector_type(selector_type) element = self.webdriver.find_element(st, selector) action = ActionChains(self.webdriver) action.drag_and_drop_by_offset(element, x, y).perform() else: raise Exception('object is element of page')
def drag_n_drop(element, drag_to): actions = ActionChains(driver) if type(drag_to) == list: actions.drag_and_drop_by_offset(element.get_actual_webelement(), drag_to[0], drag_to[1]).perform() else: actions.drag_and_drop(element.get_actual_webelement(), drag_to.get_actual_webelement()).perform()
def slider(self, locatorType, locator, data): element = self.getElement(locatorType, locator) try: actions = ActionChains(drvier) actions.drag_and_drop_by_offset(element, 0, 200).perform() self.log.info(f"Sliding element successful.") except: self.log.info(f"Sliding failed on element")
def resize_column(browser, column_name, left_or_right, offsetx): action_chains = ActionChains(browser) element = browser.execute_script( "return $('.ember-table-header-container .ember-table-content:contains(" + column_name + ")').parent().parent().children()[1]") if left_or_right == "left": action_chains.drag_and_drop_by_offset(element, -int(offsetx), 0).release().perform() else: action_chains.drag_and_drop_by_offset(element, int(offsetx), 0).release().perform()
def move_slider_to_position(self, desired_value: int, switch, switch_value): slider = self.driver.driver.find_element_by_css_selector(self._slider_size) slider_width = slider.size['width'] shift = (slider_width / 100) * ( desired_value - switch_value) if desired_value == switch_value else (slider_width / 100) * ( desired_value - switch_value) - slider_width / 100 action = ActionChains(self.driver.driver) action.drag_and_drop_by_offset(switch, shift, 0).perform()
def test_search_in_python_org(self): driver = self.driver driver.get("http://localhost:8000") assert "nengo" in driver.page_source assert "default.py" in driver.page_source element = driver.find_element_by_id("ensemble") action_chains = ActionChains(driver) action_chains.drag_and_drop_by_offset(element, xoffset=100, yoffset=200).perform()
def test_move_distance(self, elements, x=500, y=0): '''鼠标滑动距离''' time.sleep(2) action = ActionChains(self.driver) slider = self.driver.find_element_by_xpath(elements) action.click_and_hold(slider).perform() '''按下不松''' action.drag_and_drop_by_offset(slider, x, y).perform() '''移动多少的距离'''
def drag_element(locatorMethod, locatorExpression, x, y, *args): u"""拖拽元素""" global driver try: action_chains = ActionChains(driver) element = getElement(driver, locatorMethod, locatorExpression) action_chains.drag_and_drop_by_offset(element, x, y).perform() except Exception, e: raise e
def test_search_in_python_org(self): driver = self.driver action_chains = ActionChains(driver) driver.get("http://localhost:8080") node_elements = driver.find_elements_by_class_name("node") for e in node_elements: action_chains.drag_and_drop_by_offset(e, xoffset=2, yoffset=2).perform()
class taobao(): def __init__(self): self.browser = webdriver.Chrome("chromedriver.exe") # 最大化窗口 self.browser.maximize_window() self.browser.implicitly_wait(5) self.domain = 'https://www.taobao.com/' self.action_chains = ActionChains(self.browser) def login(self, username, password): while True: self.browser.get(self.domain) time.sleep(1) #会xpath可以简化这几步 #self.browser.find_element_by_class_name('h').click() #self.browser.find_element_by_id('fm-login-id').send_keys(username) #self.browser.find_element_by_id('fm-login-password').send_keys(password) self.browser.find_element_by_xpath('//*[@id="J_SiteNavLogin"]/div[1]/div[1]/a[1]').click() self.browser.find_element_by_xpath('//*[@id="fm-login-id"]').send_keys(username) self.browser.find_element_by_xpath('//*[@id="fm-login-password"]').send_keys(password) time.sleep(1) try: # 出现验证码,滑动验证 slider = self.browser.find_element_by_xpath("//span[contains(@class, 'btn_slide')]") if slider.is_displayed(): # 拖拽滑块 self.action_chains.drag_and_drop_by_offset(slider, 258, 0).perform() time.sleep(0.5) # 释放滑块,相当于点击拖拽之后的释放鼠标 self.action_chains.release().perform() except (NoSuchElementException, WebDriverException): logger.info('未出现登录验证码') # 会xpath可以简化点击登陆按钮,但都无法登录,需要使用 pyautogui 完成点击事件 #self.browser.find_element_by_class_name('password-login').click() #self.browser.find_element_by_xpath('//*[@id="login-form"]/div[4]/button').click() # 图片地址 coords = pyautogui.locateOnScreen('1.png', confidence=0.5) x, y = pyautogui.center(coords) click = pyautogui.leftClick(x, y) # nickname = self.get_nickname() # if nickname: # logger.info('登录成功,呢称为:' + nickname) # break # logger.debug('登录出错,5s后继续登录') # time.sleep(5) def get_nickname(self): self.browser.get(self.domain) time.sleep(0.5) try: return self.browser.find_element_by_class_name('site-nav-user').text except NoSuchElementException: return ''
def drag_and_drop_grade(self): """ Drag and drop grade range. """ self.wait_for_element_visibility(self.grade_ranges, "Grades ranges are visible") # We have used jquery here to adjust the width of slider to # desired range because drag and drop has behaved very inconsistently. # This does not updates the text of range on the slider. # So as a work around, we have used drag_and_drop without any offset self.browser.execute_script('$(".ui-resizable").css("width","10")') action = ActionChains(self.browser) moveable_css = self.q(css='.ui-resizable-e').results[0] action.drag_and_drop_by_offset(moveable_css, 0, 0).perform()
def get_column_cursor(step, column_name): with AssertContextManager(step): cursor_css = "body.ember-application" action_chains = ActionChains(world.browser) element = world.browser.execute_script( "return $('.ember-table-header-container .ember-table-content:contains(" + column_name + ")').parent().parent().children()[1]") action_chains.drag_and_drop_by_offset(element, 10, 0).release().perform() cursor = find_elements_by_css(world.browser, cursor_css) style = cursor[0].get_attribute("style") assert_true(step, ("auto" in style) or ("resize" in style) or ("pointer" in style)) action_chains.release() world.browser.refresh()
def test_search_in_python_org(self): driver = self.driver driver.implicitly_wait(5) actions = ActionChains(driver) driver.get("http://localhost:8080") elem1 = driver.find_element_by_css_selector('div.graph:nth-child(4) > button:nth-child(2)') actions.drag_and_drop_by_offset(elem1, xoffset=0, yoffset=-25).perform() elem2 = driver.find_element_by_css_selector('button.btn:nth-child(3)') actions.drag_and_drop_by_offset(elem2, xoffset=0, yoffset=25).perform() text1 = elem1.get_attribute('textContent') assert text1 != "0.00" text2 = elem2.get_attribute('textContent') assert text2 != "0.00"
def test_search_in_python_org(self): driver = self.driver driver.implicitly_wait(5) actions = ActionChains(driver) driver.get("http://localhost:8080") button = driver.find_element_by_css_selector('.play-pause-button') actions.click(on_element=button) actions.perform() time = driver.find_element_by_id("VIZ.SimControl.ticks_div") time_val = time.get_attribute('textContent') assert time_val != 0.00 actions.click(on_element=button) actions.perform() window = driver.find_element_by_id('VIZ.SimControl.shown_div') actions.drag_and_drop_by_offset(window, xoffset=-100, yoffset=0).perform()
def move_right_slider(self, offset): action_chain = ActionChains(self.driver) action_chain.drag_and_drop_by_offset(web_driver_wait_element(self.driver, self.RIGHT_SLIDER), offset, 0).perform()
def move_left_slider(self, offset): action_chain = ActionChains(self.driver) action_chain.drag_and_drop_by_offset(self.left_slider, offset, 0).perform()
def move_roller(self, xpath, xoffset): actionChains = ActionChains(self.browser) elem = self.browser.find_element_by_xpath(xpath) actionChains.drag_and_drop_by_offset(elem, xoffset, 0).perform()
class TmallLogin(object): def __init__(self): self.driver = webdriver.PhantomJS(service_args=['--load-images=no']) self.action = ActionChains(self.driver) def sendinfo(self): self.driver.find_element_by_id('TPL_username_1').send_keys('*****@*****.**') self.driver.find_element_by_id('TPL_password_1').send_keys('codeismath11') self.driver.find_element_by_id('J_SubmitStatic').click() def checkslipper(self): # 验证滑块部分 slipper = self.driver.find_element_by_css_selector('.nc-lang-cnt') h_position = slipper.location logger.info('-' * 30 + str(h_position)) self.action.drag_and_drop_by_offset(slipper, h_position['x'] + 300, h_position['y']).perform() def login(self): logger.info("Login Tmall") self.driver.get("https://login.tmall.com/") login_iframe = self.driver.find_element_by_id("J_loginIframe") if not login_iframe: logger.warning('Not found tmall login iframe!') return self.driver.switch_to.frame(login_iframe) if self.driver.find_element_by_id('J_Quick2Static').is_displayed(): self.driver.find_element_by_id('J_Quick2Static').click() time.sleep(0.5) slipper = self.driver.find_element_by_css_selector('.nc-lang-cnt') if slipper: # 如果有滑块 self.checkslipper() self.sendinfo() time.sleep(uniform(8, 12)) self.driver.get_screenshot_as_file('pic/success.png') def wait_for_clickable(self, selector, timeout=10): WebDriverWait(self.driver, timeout).until( EC.element_to_be_clickable((By.CSS_SELECTOR, selector)) ) def wait_after_click(self, click, wait, timeout=10): comm_ele = self.driver.find_element_by_css_selector(click) comm_ele.click() WebDriverWait(self.driver, timeout).until( EC.visibility_of_element_located((By.CSS_SELECTOR, wait)) ) def determine(self, element): # 如果找到元素名,返回真,如果找不到,返回假 try: self.driver.find_element_by_class_name(element) return True except BaseException: return False def choose_selector(self): # 选择器分类 dot_element = 'rate-page-break' result = self.determine(dot_element) print '--'*20 print result print '--'*20 if result is True: # 如果有点点点的选择器 next_page_selector = '.rate-page .rate-paginator .rate-page-break + a[data-page]' return next_page_selector else: next_page_selector = '.rate-page .rate-paginator a[data-page]' results = self.driver.find_elements_by_css_selector(next_page_selector) if len(results) == 1 and results[0].text == u'下一页>>': return next_page_selector elif len(results) == 2: # 在中间的页码,有上一页和下一页时,有待检验 return '.rate-page .rate-paginator a[data-page]:nth-child(5)' elif len(results) == 1 and results[0].text == u'<<上一页': pass # 说明没有下一页了,不用再返回选择器了 def crawler(self): # url = 'https://detail.tmall.com/item.htm?spm=a220m.1000858.1000725.10.5suWJ0&id=527680541344&skuId=3150349001482&areaId=320100&cat_id=2&rn=5d8121f40e659a29a6ed8dfce87ffcbd&user_id=2786278078&is_b=1' url = 'https://detail.tmall.com/item.htm?spm=a1z10.15-b.w4011-7524477099.99.XU8KX2&id=39578745679&rn=f879610ca3b5a66a8cd08f19a0cc2de2&abbucket=8' logger.info(url) logger.info('the url for collecting info!') self.driver.get(url) time.sleep(uniform(6, 8)) self.driver.save_screenshot('pic/1.png') self.wait_for_clickable('.tm-selected') # 等累计评论可以点击了 self.driver.save_screenshot('pic/2.png') self.wait_after_click('.tm-selected', '.rate-grid') # 点击(前面的)累计评价,等(后面的)评论区域出现 wait = ui.WebDriverWait(self.driver, 10) wait.until(lambda driver: self.driver.find_element_by_id('footer')) self.driver.save_screenshot('pic/3.png') page_queue.put({'url': url, 'page': '1', 'html': self.driver.page_source}) # 将第一页的评论内容放入队列中 time.sleep(uniform(2, 3)) for page in xrange(2, 4): time.sleep(uniform(10, 20)) logger.info(page) print '**'*20 selector = self.choose_selector() print selector print '**'*20 try: self.wait_for_clickable(selector) # 等下一页的选择器出现 self.driver.save_screenshot('pic/turnpage_1.png') except Exception, err: logger.info(err) self.wait_after_click(selector, '.rate-grid') # 点击(前面的)下一页的选择器,等后面的评论区域出现 self.driver.save_screenshot('pic/turnpage_2.png') time.sleep(uniform(2, 3)) self.driver.save_screenshot('pic/screenshot_%s.png' % page) page_queue.put({'url': url, 'page': page, 'html': self.driver.page_source}) # 将翻页的内容放入队列中
def action_with_element(self, element_menu, drag): action = ActionChains(self.driver) action.move_to_element(element_menu).click() action.drag_and_drop_by_offset(drag, 45, 45) action.perform()
def action_with_items(self, element_menu, element_item, drag_off): action = ActionChains(self.driver) action.move_to_element(element_menu).click() action.drag_and_drop_by_offset(element_item, 0, drag_off) action.perform()
def width(self, value): offset = value - self.width action = ActionChains(self.driver) action.drag_and_drop_by_offset(self._resize_handler, offset, 0) action.perform()