def get_driver(cls,selenium_hub,browser_type): driver=None browser_type=browser_type.lower() download_file_content_types = "application/octet-stream,application/vnd.ms-excel,text/csv,application/zip,application/binary" if browser_type=='ie': opt = ie_webdriver.Options() opt.force_create_process_api = True opt.ensure_clean_session = True opt.add_argument('-private') ie_capabilities = webdriver.DesiredCapabilities.INTERNETEXPLORER.copy() ie_capabilities.update(opt.to_capabilities()) driver = webdriver.Remote(selenium_hub, desired_capabilities=ie_capabilities) elif browser_type=='firefox': firefox_profile=FirefoxProfile() # firefox_profile参数可以在火狐浏览器中访问about:config进行查看 firefox_profile.set_preference('browser.download.folderList',2) # 0是桌面;1是“我的下载”;2是自定义 firefox_profile.set_preference('browser.download.dir',ReadConfig().config.download_dir) firefox_profile.set_preference('browser.helperApps.neverAsk.saveToDisk',download_file_content_types) firefox_options = Firefox_Options() if ReadConfig().config.is_firefox_headless.lower()=='true': firefox_options.add_argument('--headless') driver = webdriver.Remote(selenium_hub, webdriver.DesiredCapabilities.FIREFOX.copy(),browser_profile=firefox_profile,options=firefox_options) elif browser_type=='chrome': chrome_options=Chrome_Options() prefs={'download.default_directory':ReadConfig().config.download_dir,'profile.default_content_settings.popups':0} chrome_options.add_experimental_option('prefs',prefs) if ReadConfig().config.is_chrome_headless.lower()=='true': chrome_options.add_argument('--headless') driver = webdriver.Remote(selenium_hub, webdriver.DesiredCapabilities.CHROME.copy(),options=chrome_options) else: return driver driver.maximize_window() driver.delete_all_cookies() return driver
def search_and_download(search_term: str, driver_path: str, target_path='./images', number_images=10): target_folder = os.path.join(target_path, '_'.join(search_term.lower().split(' '))) if not os.path.exists(target_folder): os.makedirs(target_folder) if driver_path == './chromedriver': chrome_options = Chrome_Options() chrome_options.add_argument("--headless") with webdriver.Chrome(executable_path=driver_path, options=chrome_options) as wd: res = fetch_image_urls(search_term, number_images, wd=wd, sleep_between_interactions=0.5) else: firefox_options = Firefox_Options() firefox_options.add_argument("--headless") with webdriver.Firefox(executable_path=driver_path, options=firefox_options) as wd: res = fetch_image_urls(search_term, number_images, wd=wd, sleep_between_interactions=0.5) counter = 0 for elem in res: persist_image(target_folder, elem, counter) counter += 1
def abrir_Navegador(self, URL): navegador = Inicializar.NAVEGADOR print("----------------") print(navegador) print("---------------") if navegador == ("CHROME"): options = Chrome_Options() options.add_argument('--start-maximized') self.driver = webdriver.Chrome(chrome_options=options) self.driver.implicitly_wait(10) self.dir_navegador = "CHROME" self.driver.get(URL) return self.driver if navegador == ("CHROME_headless"): options = Chrome_Options() options.add_argument('headless') options.add_argument('--start-maximized') options.add_argument('--lang=es') self.driver = webdriver.Chrome(chrome_options=options) self.driver.implicitly_wait(10) self.dir_navegador = "CHROME Headless" self.driver.get(URL) return self.driver if navegador == ("FIREFOX"): opts = FirefoxOptions() opts.set_preference("intl.accept_languages", "es") self.driver = webdriver.Firefox() self.driver.implicitly_wait(10) self.dir_navegador = "FIREFOX" self.driver.get(URL) return self.driver elif navegador != ("CHROME_headless") and navegador != ( "CHROME") and navegador != ("FIREFOX"): print("----------------") print("Define el DRIVER") print("----------------") pytest.skip("Define el DRIVER") exit
def chrome_init(self, request): options = Chrome_Options() options.add_argument("--no-sandbox") options.add_argument("--headless") options.add_argument("--disable-gpu") options.add_argument("--remote-debugging-port=9222") options.add_argument("--disable-dev-shm-usage") print("Running chrome.") driver = webdriver.Chrome(options=options) request.cls.chrome_driver = driver yield driver.close()
def setUp(self): self.email = "*****@*****.**" self.comment = "QA-228" self.browser = os.getenv("BROWSER") if self.browser == "FIREFOX": self.options = Firefox_Options() self.options.add_argument('-headless') else: self.options = Chrome_Options() self.options.add_argument('--headless') self.driver = Remote( command_executor="http://127.0.0.1:4444/wd/hub", desired_capabilities=getattr(DesiredCapabilities, self.browser).copy(), options=self.options ) self.anonimazer = Anonimazer(self.driver)
class GoogleChromeCompatibility(UITesting): selenium_server = "selenium-chrome" options = Chrome_Options() platform = 'Chrome'
def Login_logic(self): name = self.Name_LineEdit.text() password = self.Password_LineEdit.text() if len(name) == 0: self.show_message_single.emit('在?不填学号的吗???') return if len(password) == 0: self.show_message_single.emit('在?不填密码的吗???') return if not RE_match(r'^.{13}$', name): self.show_message_single.emit('噔 噔 咚\n学号长度不对劲???') return if not RE_match(r'^\d{13}$', name): self.show_message_single.emit('噔 噔 咚\n学号是只有数字的,对吧') return #密码长度4位以上 if not RE_match(r'^.{4}.*$', password): self.show_message_single.emit('噔 噔 咚\n密码长度不对劲???') return try: url = 'http://sso.jwc.whut.edu.cn/Certification/toIndex.do' chrome_options = Chrome_Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') bro = Selenium_Webdriver.Chrome('./chromedriver', options=chrome_options) bro.get(url) bro.find_element_by_id('username').send_keys(name) bro.find_element_by_id('password').send_keys(password) bro.find_element_by_id('submit_id').click() #如果学号密码错误,点击登录按钮并不会报错,还要试一下获取网页内容,看能不能获取登录后的教务处网页,不能就是学号密码错了 bro.find_element_by_xpath('//*[@class="main-logo"]') except BaseException as e: try: #selenium扔出来的Exception是有msg属性的,但非selenium扔出来的Exception就没有,这种就说不准是咋整的报错了 massage = e.msg if RE_search(r'您的密码安全级别过低,请进入教务系统按要求修改密码', massage) or RE_search( r'unexpected alert open', massage): self.show_message_single.emit('噔 噔 咚\n学号或者密码错了???') return elif RE_search( r'no such element: Unable to locate element: {"method":"xpath","selector":"//*[@class="main-logo"]"}', massage): self.show_message_single.emit('噔 噔 咚\n学号或者密码错了???') return elif RE_search( r'unknown error: net::ERR_INTERNET_DISCONNECTED', massage) or RE_search(r'unexpected alert open', massage): self.show_message_single.emit( '噔 噔 咚\n网不好嘛,打不开教务处网站???') return else: self.show_message_single.emit( '噔 噔 咚\n发生了咱也搞不懂的错误,咱也不知道是咋整的,建议拜拜图灵老爷子,肯定灵(大概)???' ) return #非selenium扔出来Exception except BaseException as e: self.show_message_single.emit( '噔 噔 咚\n发生了咱也搞不懂的错误,咱也不知道是咋整的,建议拜拜图灵老爷子,肯定灵(大概)???' ) return finally: bro.quit() self.login_thread = None self.Login_Button.setStyleSheet('''#Login_Button{ border: 0px; border-radius: 20px; width: 40px; height: 40px; color: rgb(255,255,255); background: rgba(0,0,0,0.2); font-family: 'Microsoft Yahei light'; font-size: 20px; outline: none } #Login_Button:hover{ background: rgba(0,0,0,0.3); } #Login_Button:pressed{ background: rgba(0,0,0,0.4); }''') else: #没报错就是登录成功了 self.data_struct_module.login_successful_signal.emit( name, password, [bro]) self.message_window = None #如果有没有关闭的消息窗口,就会被垃圾回收强行清理掉
def set_selenium_local_session( proxy_address, proxy_port, proxy_username, proxy_password, headless_browser, browser_profile_path, disable_image_load, page_delay, chromedriver_path, browser_executable_path, logfolder, logger, chromedriver_log_level, ): browser = None err_msg = "" user_agent = ( # TODO: set user agent to chrome "Mozilla/5.0 (iPhone; CPU iPhone OS 12_1 like Mac OS X) AppleWebKit/605.1.15 " "(KHTML, like Gecko) FxiOS/18.1 Mobile/16B92 Safari/605.1.15") Settings.user_agent = user_agent chrome_options = Chrome_Options() if headless_browser: chrome_options.add_argument("--headless") # if browser_profile_path is not None: # chrome_profile = webdriver.ChromeProfile(browser_profile_path) # else: # chrome_profile = webdriver.ChromeProfile() if browser_executable_path is not None: chrome_options.binary = browser_executable_path # set "info" by default # set "trace" for debugging, development only chrome_options.add_argument( "--log-level={}".format(chromedriver_log_level)) # set language to English chrome_options.add_argument("--lang={}".format('en')) if user_agent: chrome_options.add_argument("--user-agent={}".format(user_agent)) if disable_image_load: # There also exists an extension for this, for further information: # https://stackoverflow.com/questions/28070315/python-disable-images-in-selenium-google-chromedriver prefs = {"profile.managed_default_content_settings.images": 2} chrome_options.add_experimental_option("prefs", prefs) if proxy_address and proxy_port: chrome_options.add_argument('{0}:{1}'.format(proxy_address, proxy_port)) chrome_options.add_argument("--mute-audio") #TODO: extension to hide selenium, check out browser_firefox to see how it's done # chromedriver_log = "{}chromedriver.log".format(logfolder) chrome_options.add_argument("--log_path={}".format(chromedriver_log)) driver_path = chromedriver_path or get_chromedriver() browser = webdriver.Chrome( # chrome_profile=chrome_profile, executable_path=driver_path, # log_path=chromedriver_log, options=chrome_options) if proxy_username and proxy_password: # proxy_authentication(browser, logger, proxy_username, proxy_password) pass #TODO: implement proxy_authentication browser.implicitly_wait(page_delay) try: browser.set_window_size(375, 812) except UnexpectedAlertPresentException as exc: logger.exception("Unexpected alert on resizing web browser!\n\t" "{}".format(str(exc).encode("utf-8"))) close_browser(browser, False, logger) return browser, "Unexpected alert on browser resize" message = "Session started!" highlight_print("browser", message, "initialization", "info", logger) browser.typeofbr = "Chrome" return browser, err_msg
def chrome(): options = Chrome_Options() #options.add_argument("--headless") driver = webdriver.Chrome() return driver