def test_chrome_options_with_custom_options(configuration): optionz = {"abc", "def"} chrome_opts = ChromeOptions() for x in optionz: chrome_opts.add_argument(x) assert_that(configuration( chrome_options=chrome_opts).chrome_options).is_equal_to(chrome_opts)
def execute_event_auto(event): eventStartTime = int(round(time.time() * 1000)) chrome_options = Options() chrome_options.add_argument("--headless") # chrome_options.add_argument("--proxy-server=127.0.0.1:12333") driver_frontend = webdriver.Chrome(options=chrome_options) try: processor = TweetProcess(driver_frontend) param = { 'tweet': event['tweet'], 'template': event['template'], 'translate': event['translate'], 'out': 1 } if 'noLikes' in event and event['noLikes']: param['noLikes'] = event['noLikes'] processor.open_page(self_url + "?" + parse.urlencode(param).replace("+", "%20")) # time.sleep(20) try: WebDriverWait(driver_frontend, 60, 0.5).until( EC.presence_of_element_located((By.CSS_SELECTOR, 'canvas'))) except: 0 == 0 finally: filename = processor.save_screenshots_auto(eventStartTime) finally: # time.sleep(5) driver_frontend.quit() return filename
def chrome_options(self, chrome_options: Set[str]) -> None: if isinstance(chrome_options, ChromeOptions) or chrome_options is None: self._chrome_options = chrome_options return self._type_check("chrome_options", chrome_options, (set, ChromeOptions)) options = ChromeOptions() for option in chrome_options: options.add_argument(option) self._chrome_options = options
def setUpClass(cls): super().setUpClass() options = Options() options.add_argument('--headless') desired_capabilities = DesiredCapabilities.CHROME desired_capabilities['goog:loggingPrefs'] = {'browser': 'ALL'} cls.selenium = WebDriver(executable_path='/usr/local/bin/chromedriver', chrome_options=options, desired_capabilities=desired_capabilities) cls.site_root = 'http://0.0.0.0:8000'
def createWebdriver(self): chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('--disable-dev-shm-usage') driver = webdriver.Chrome(options=chrome_options) return driver
def execute_event(event): chrome_options = Options() chrome_options.add_argument("--headless") # chrome_options.add_argument("--proxy-server=127.0.0.1:12333") driver = webdriver.Chrome(options=chrome_options) try: processor = TweetProcess(driver) processor.open_page(event['url']) processor.modify_tweet() processor.scroll_page_to_tweet(event['fast']) filename = processor.save_screenshots() finally: # time.sleep(5) driver.quit() return filename
def get_configured_chrome(headless=False): chrome_options = Chrome() if headless: print('\nBrowser will start in headless mode!') chrome_options.add_argument('--headless') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--enable-automation') chrome_options.add_argument('--window-size=1920,1080') configured = webdriver.Chrome(options=chrome_options, executable_path=get_driver_path('chromedriver')) return configured
def execute_event(self, event): # logger.info(execute_event.name) # logger.info(self.request) # logger.info(current_process().index) chrome_options = Options() chrome_options.add_argument("--headless") if (chrome_twitter_port != None): chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:" + str(chrome_twitter_port[current_process().index])) # chrome_options.add_argument("--user-data-dir=/tmp/chromium-user-dir") # chrome_options.add_argument("--no-sandbox") # WIDTH = 640 # 宽度 # HEIGHT = 4000 # 高度 # PIXEL_RATIO = 1.0 # 分辨率 # # mobileEmulation = {"deviceMetrics": {"width": WIDTH, "height": HEIGHT, "pixelRatio": PIXEL_RATIO}} # chrome_options.add_experimental_option('mobileEmulation', mobileEmulation) # chrome_options.add_argument( # "--user-agent=Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) Waterfox/56.2") # chrome_options.add_argument("--proxy-server=127.0.0.1:12333") driver = webdriver.Chrome(options=chrome_options) filename = 'success|[]' #logger.info("tweet.execute_event.chrome_started") try: processor = TweetProcess(driver) processor.open_page(event['url']) #logger.info("tweet.execute_event.page_opened") processor.modify_tweet() # logger.info("tweet.execute_event.js_executed") # processor.scroll_page_to_tweet(event['fast']) filename = processor.save_screenshots(event['fast']) #logger.info("tweet.execute_event.png_get") except: # driver.save_screenshot(f'Matsuri_translation/frontend/cache/LastError.png') driver.quit() return 'LastError|[]' finally: # # time.sleep(5) driver.quit() # return filename
def execute_event(event): chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument( "--user-agent=Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) Waterfox/56.2" ) # chrome_options.add_argument("--proxy-server=127.0.0.1:12333") driver = webdriver.Chrome(options=chrome_options) try: processor = TweetProcess(driver) processor.open_page(event['url']) processor.modify_tweet() processor.scroll_page_to_tweet(event['fast']) filename = processor.save_screenshots() except: driver.save_screenshot('/home/ubuntu/TTLastError.png') finally: # time.sleep(5) driver.quit() return filename
def execute_event_auto(event): eventStartTime = int(round(time.time() * 1000)) chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument("--user-agent=TweetoasterAutomaticMode") # 增加UA以触发Google Analytics # chrome_options.add_argument("--proxy-server=127.0.0.1:12333") driver_frontend = webdriver.Chrome(options=chrome_options) try: processor = TweetProcess(driver_frontend) param = { 'tweet': event['tweet'], 'template': event['template'], 'out': 1 } if event['translate'] != '': param['translate'] = event['translate'] if 'noLikes' in event and event['noLikes']: param['noLikes'] = event['noLikes'] processor.open_page(self_url + "?" + parse.urlencode(param).replace("+", "%20")) # time.sleep(20) try: WebDriverWait(driver_frontend, 60, 0.5).until( EC.presence_of_element_located((By.CSS_SELECTOR, 'canvas'))) except: 0 == 0 finally: filename = processor.save_screenshots_auto(eventStartTime) try: event["filename"] = filename insert_text_chunk( f'Matsuri_translation/frontend/cache/{filename}.png', f'Matsuri_translation/frontend/cache/{filename}.png', json.dumps(event).encode("utf-8")) except: print("error in metadata") finally: # time.sleep(5) driver_frontend.quit() return filename
def get_capabilities(cls, extensions=None): from selenium.webdriver.chrome.webdriver import Options as ChromeOptions chrome_options = ChromeOptions() chrome_options.add_argument( '--allow-running-insecure-content') # Move to a config? if extensions: for extension in extensions: chrome_options.add_extension(extension) chrome_options.add_experimental_option( 'prefs', { 'credentials_enable_service': False, 'profile': { 'password_manager_enabled': False } }) if 'mobile_emulation' in capabilities.keys( ) and capabilities['mobile_emulation']: chrome_options.add_experimental_option( 'mobileEmulation', capabilities['mobile_emulation']) chrome_capabilities = chrome_options.to_capabilities() chrome_capabilities['loggingPrefs'] = {'browser': 'ALL'} return chrome_capabilities
def execute_event(event): chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument("--user-data-dir=/tmp/chromium-user-dir") # chrome_options.add_argument("--no-sandbox") WIDTH = 640 # 宽度 HEIGHT = 4000 # 高度 PIXEL_RATIO = 1.0 # 分辨率 mobileEmulation = { "deviceMetrics": { "width": WIDTH, "height": HEIGHT, "pixelRatio": PIXEL_RATIO } } chrome_options.add_experimental_option('mobileEmulation', mobileEmulation) # chrome_options.add_argument( # "--user-agent=Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) Waterfox/56.2") # chrome_options.add_argument("--proxy-server=127.0.0.1:12333") driver = webdriver.Chrome(options=chrome_options) filename = 'success|[]' try: processor = TweetProcess(driver) processor.open_page(event['url']) processor.modify_tweet() processor.scroll_page_to_tweet(event['fast']) filename = processor.save_screenshots() except: # driver.save_screenshot(f'Matsuri_translation/frontend/cache/LastError.png') driver.quit() return 'LastError|[]' finally: # # time.sleep(5) driver.quit() # return filename
def execute_event_auto(self, event): eventStartTime = int(round(time.time() * 1000)) chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument("--user-data-dir=/tmp/chromium-user-dir") chrome_options.add_argument("--user-agent=TweetoasterAutomaticMode") if (chrome_auto_port != None): chrome_options.add_experimental_option( "debuggerAddress", "127.0.0.1:" + str(chrome_auto_port[current_process().index])) driver_frontend = webdriver.Chrome(options=chrome_options) try: processor = TweetProcess(driver_frontend) param = { 'tweet': event['tweet'], 'template': event['template'], 'out': 1 } if event['translate'] != '': param['translate'] = event['translate'] if 'noLikes' in event and event['noLikes']: param['noLikes'] = event['noLikes'] driver_frontend.get(self_url + "?" + parse.urlencode(param).replace("+", "%20")) # time.sleep(20) try: WebDriverWait(driver_frontend, 60, 0.5).until( EC.presence_of_element_located((By.CSS_SELECTOR, 'canvas'))) except: driver_frontend.save_screenshot( f'Matsuri_translation/frontend/cache/LastErrorAuto.png') finally: filename = processor.save_screenshots_auto(eventStartTime) try: event["filename"] = filename insert_text_chunk( f'Matsuri_translation/frontend/cache/{filename}.png', f'Matsuri_translation/frontend/cache/{filename}.png', json.dumps(event).encode("utf-8")) except: print("error in metadata") except: driver_frontend.save_screenshot( f'Matsuri_translation/frontend/cache/LastErrorAuto.png') finally: # time.sleep(5) driver_frontend.quit() return filename
def execute_event(self, event): logger.info(execute_event.name) logger.info(self.request) logger.info(current_process().index) chrome_options = Options() chrome_options.add_argument("--headless") chrome_options.add_argument('--disable-dev-shm-usage') if (chrome_twitter_port != None): logger.info('chrome_twitter_port ' + str(chrome_twitter_port)) chrome_options.add_experimental_option( "debuggerAddress", "127.0.0.1:" + str(chrome_twitter_port[current_process().index])) chrome_options.add_argument("--no-sandbox") try: driver = webdriver.Chrome(options=chrome_options) except Exception as e: import traceback logger.error(e) traceback.print_exc() raise e filename = 'success|[]' logger.info("tweet.execute_event.chrome_started") try: processor = TweetProcess(driver) processor.open_page(event['url']) logger.info("tweet.execute_event.page_opened") processor.modify_tweet() logger.info("tweet.execute_event.js_executed") # processor.scroll_page_to_tweet(event['fast']) filename = processor.save_screenshots(event['fast']) logger.info("tweet.execute_event.png_get") except: return 'LastError|[]' finally: driver.quit() return filename
from selenium import webdriver from selenium.webdriver.chrome.webdriver import Options import time import json import requests import getpass options = Options() options.add_argument('--headless') options.add_argument('--disable-gpu') headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 ' '(KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36' } def login(): """ 模拟豆瓣登录selenium版 :return: """ drive = webdriver.Chrome('E:\刘禄扬\安装包\chromedriver\chromedriver.exe') url = 'https://accounts.douban.com/passport/login_popup?login_source=anony' # 请求 drive.get(url) time.sleep(2) # 保存html with open('images/douban_login.html', 'w', encoding='utf8') as f:
# coding:utf-8 # author: Articuly # datetime: 2020/6/12 17:54 # software: PyCharm import time, random import pickle from selenium import webdriver from selenium.webdriver.chrome.webdriver import Options, WebDriver # 创建实例 options = Options() # 开启无头模式 options.headless = True options.add_argument('window-size=1550x838') options.add_experimental_option('excludeSwitches', ['enable-automation']) browser = WebDriver(r'D:\Browser\Chromium\chromedriver.exe', options=options) # 打开网页 browser.get('https://www.taobao.com') # 将浏览器最大化显示 browser.maximize_window() print('windows', browser.get_window_size()) # 隐性等待页面加载完成,如果一个元素获取不到,会等待30s browser.implicitly_wait(30) try: with open('cookie.txt', 'rb') as f: cookies = pickle.load(f) except Exception as e: print(e)
# End of Import Section # Importing Webdriver_Manager to prevent the need for maintenance. # https://github.com/SergeyPirogov/webdriver_manager """ This was the original method I was using when developing this script, please run this if you are curious of what is happening under the hood of Selenium or you need to troubleshoot any issues. """ # print("Real Browser Launching") # browser = webdriver.Chrome(ChromeDriverManager().install()) # print("Real Browser has Launched") """ The Headless browsing option greatly reduces the amount of time it takes for the scraper to run. """ print("Headless Browser Running") options = Options() options.add_argument("--headless") # Runs Chrome in headless mode. options.add_argument('--no-sandbox') # Bypass OS security model options.add_argument('--disable-gpu') # applicable to windows os only options.add_argument('start-maximized') # options.add_argument('disable-infobars') options.add_argument("--disable-extensions") browser = webdriver.Chrome(options=options, executable_path=ChromeDriverManager().install()) print("Headless Browser has Launched") def login_into_dash(json_target_file): """ Takes the login information from JSON file and passes data to login form. Parameter json_target_file needs to be equal to the file's location.
def get_configured_chrome(headless=HEADLESS_MODE): chrome_options = Chrome() if headless: print('\nBrowser will start in headless mode!') chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('--disable-notifications') chrome_options.add_argument('--enable-automation') chrome_options.add_argument('--start-maximized') chrome_options.add_argument('--window-size=1920,1080') configured = webdriver.Chrome( options=chrome_options, executable_path=get_driver_path('chromedriver')) return configured
def __init__(self): chrome_options = Options() chrome_options.add_argument("--no-sandbox") chrome_options.add_argument("--disable-dev-shm-usage") chrome_options.add_argument('--headless') chrome_options.add_argument('--disable-gpu') chrome_options.add_argument('--lang=zh_CN') #chrome_options.add_argument('lang=zh_CN.UTF-8') #chrome_options.add_argument('accept-language=zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,ja;q=0.6') #chrome_options.add_extension('chrome-modheader.crx') #chrome_options.add_argument('--disk-cache-dir='+os.path.join('.','cache','chromecache')) chrome_options.add_argument("user-agent="+randUserAgent()) self.driver = webdriver.Chrome(options=chrome_options)
from selenium import webdriver from selenium.webdriver.chrome.webdriver import Options # driver = webdriver.PhantomJS('/usr/bin/phatomjs') chrome_options = Options() # 添加无头 chrome_options.add_argument('--headless') driver = webdriver.Chrome(chrome_options=chrome_options) driver.get('https://www.google.com/') driver.save_screenshot('谷歌.png') print(driver.title) driver.quit()
except: driver_frontend.save_screenshot( f'Matsuri_translation/frontend/cache/LastErrorAuto.png') finally: # time.sleep(5) driver_frontend.quit() return filename if __name__ == "__main__": event = { 'url': 'https://twitter.com/minatoaqua/status/1383771374183878658' } chrome_options = Options() chrome_options.add_argument("--headless") if (chrome_twitter_port != None): chrome_options.add_experimental_option( "debuggerAddress", "127.0.0.1:" + str(chrome_twitter_port[current_process().index])) driver = webdriver.Chrome(options=chrome_options) filename = 'success|[]' # logger.info("tweet.execute_event.chrome_started") try: processor = TweetProcess(driver) processor.open_page(event['url']) # logger.info("tweet.execute_event.page_opened") processor.modify_tweet() # logger.info("tweet.execute_event.js_executed") # processor.scroll_page_to_tweet(event['fast'])
def __init__(self): chrome_options = Options() chrome_options.add_argument("--headless") # chrome_options.add_argument("--proxy-server=127.0.0.1:12333") if self._driver is None: self.driver = webdriver.Chrome(options=chrome_options)
$("body").css("overflow","hidden"); $('.follow-button').css('display','none'); var timestamp = document.querySelector('.permalink-header .time > a > span').getAttribute('data-time-ms'); var now = new Date(timestamp - 0); var year = now.getFullYear(); var month = 1 + now.getMonth(); var day = now.getDate(); var hours = now.getHours() < 10 ? "0" + now.getHours() : now.getHours(); var minutes = now.getMinutes() < 10 ? "0" + now.getMinutes() : now.getMinutes(); var time = hours + ":" + minutes; var str = year + "年" + month + "月" + day + "日," + time; document.querySelector('.client-and-actions .metadata > span').innerText = str; ''') # self.driver.execute_script( # f'''$('.js-tweet-text-container').first().after('<div class="tweet-translation" data-dest-lang="zh"><div class="translation-attribution" style="font-size: 20px"><span><a class="attribution-logo" href="" rel="noopener" target="_blank" style="width: 360px; height: 31px; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAWgAAAAfCAMAAAD9a6cqAAADAFBMVEVHcEz89elLkv9kn//8qxUXXOf/rRX/rBFAiv42hf7V4vj/sBn/rAw9if//rAv/qws1hf//syL/uDRFi/f/sh03hv//rAsxgv//rQ//rQ7/rA00hP//rxUyg//p7/T/qwkzhP/o8v//tio+iv////8ugP87iP8zg/8yg//+wE3x9///rA3/qwr/rhH/syM6iP8zhP/j7v8vgf8yg/8xgv8yg/8ygv//rAu/pI//rhEyg/85h/+gxf8yff8xg///4qiRvP//rQ7/xFD/rAwpff9HkP86h///rhJuqP/RvrDw8/f/rQ/Xybv+z3ROlP95rv/W5v//rhCvz///sBrg6/vp5+azrKb+6MH/rQ7cwq4+iv+It/+91v9Ej///sh2Wv/+tknb/vDlzq//G3f/9/fxUR0A8if+bjoTFqJI/i////fz+9+ry8vH/tCL/sx9Ai/9Fj//b08zIwK3e2NFLkv9BjP/136aUsNZWmf//0nr/wUbf6/9ppP//v0H/5rT/vDr/0nrNvbT49/b/pwH/tSdenv94rf+7t7H/03r/ymP/03uWv/+lbUP/tCLJzc5spv9Kkv9bSj76+POtqqNkov99emuhkYJQT07/zWyJjIufxP+CdW1lov//wkvc1Myjx//t4dujx//Z3d/h0cX/vTpnWU7/////qwoyg///rQ4wgf80hP8ofP/9/v8lef/039AtgP//qQP/pgAgd/88if//qwc4h/9Cjf9no//45tj/rxVLk///oAD4pmj/tCFcnf/v2sjr0r9Tl//K3//gu5n/7cn+1oP5+//Grp3PtaTahFP//PVup///9+f/3ZvqxaPohFj9q27jo3PXd0vkronv0avZl3H/sRv+7t3tmlzq4NJ4X03+2pCXd13Sqoa4rIjiy7bot3zDkmm/nH6yf1X7/Kr/tXFgWVTDZzvzq3TYkV6ymoj4u3323bnumm70zZL9+s6XgWzq1YPFgFL2v4/xcFH4lWO8uav64tB9fn/iYUDppmj494/c3t75+feZZDrfh/71AAAApnRSTlMAAhIKBAIHAgIEBSffHPjvtz8VJjJI5ZR0l8iLSvcS0GD+/j3+4zCk0g391o9tH1J1/tzpq56AwP1jxfD8Bmf+/a3+hfZuW3st+SC4/v6q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) 0 0 no-repeat"></a></div><p class="tweet-translation-text"></p><div class="js-tweet-text-container"><p data-aria-label-part="0" class="TweetTextSize TweetTextSize--jumbo js-tweet-text tweet-text" lang="">{text}</div>');''') if __name__ == '__main__': from selenium.webdriver.chrome.webdriver import Options from selenium import webdriver chrome_options = Options() # chrome_options.add_argument("--headless") chrome_options.add_argument("--proxy-server=127.0.0.1:12333") driver = webdriver.Chrome(options=chrome_options) t = TweetProcess(driver) t.open_page('https://twitter.com/7216_2nd/status/1144776965552922624') t.modify_tweet('这是翻译') t.scroll_page_to_tweet() t.save_screenshots()
import sys from time import sleep import pexpect from django.contrib.staticfiles.testing import StaticLiveServerTestCase from selenium.webdriver.chrome.webdriver import WebDriver, Options chrome_options = Options() chrome_options.add_argument('--headless') chrome_options.add_argument('--no-sandbox') chrome_options.add_argument('--disable-dev-shm-usage') class MySeleniumTests(StaticLiveServerTestCase): @classmethod def setUpClass(cls): super().setUpClass() cls.selenium = WebDriver(options=chrome_options) cls.selenium.implicitly_wait(10) cls.webdev = pexpect.spawn('webdev serve', cwd='dart_test_app') cls.webdev.logfile = sys.stdout.buffer cls.webdev.expect('Succeeded', timeout=90) @classmethod def tearDownClass(cls): cls.webdev.terminate(True) cls.selenium.quit() super().tearDownClass() def test_dart_is_running(self): self.selenium.get(self.live_server_url)