Beispiel #1
0
    def authenticate_webdriver(
        self,
        driver: WebDriver,
        user: "******",
    ) -> WebDriver:
        """
        Default AuthDriverFuncType type that sets a session cookie flask-login style
        :return: The WebDriver passed in (fluent)
        """
        # Short-circuit this method if we have an override configured
        if self._auth_webdriver_func_override:
            return self._auth_webdriver_func_override(driver, user)

        # Setting cookies requires doing a request first
        driver.get(headless_url("/login/"))

        if user:
            cookies = self.get_auth_cookies(user)
        elif request.cookies:
            cookies = request.cookies
        else:
            cookies = {}

        for cookie_name, cookie_val in cookies.items():
            driver.add_cookie(dict(name=cookie_name, value=cookie_val))

        return driver
class CookieTest(unittest.TestCase):
  """Cookie test for the json webdriver protocol"""

  def setUp(self):
    self._launcher = ChromeDriverLauncher(root_path=os.path.dirname(__file__))
    self._driver = WebDriver(self._launcher.GetURL(),
                             DesiredCapabilities.CHROME)

  def tearDown(self):
    self._driver.quit()
    self._launcher.Kill()

  def testAddCookie(self):
    self._driver.get(self._launcher.GetURL() + '/test_page.html')
    cookie_dict = None
    cookie_dict = self._driver.get_cookie("chromedriver_cookie_test")
    cookie_dict = {}
    cookie_dict["name"]= "chromedriver_cookie_test"
    cookie_dict["value"] = "this is a test"
    self._driver.add_cookie(cookie_dict)
    cookie_dict = self._driver.get_cookie("chromedriver_cookie_test")
    self.assertNotEqual(cookie_dict, None)
    self.assertEqual(cookie_dict["value"], "this is a test")

  def testDeleteCookie(self):
    self.testAddCookie();
    self._driver.delete_cookie("chromedriver_cookie_test")
    cookie_dict = self._driver.get_cookie("chromedriver_cookie_test")
    self.assertEqual(cookie_dict, None)
Beispiel #3
0
def use_cookies_login(driver: WebDriver):
    """加载wxcookies.pickle文件中的cookies信息,进入登陆状态"""
    driver.get('https://work.weixin.qq.com/wework_admin/frame#index')
    with open('../data/wxcookies.pickle', 'rb') as cookies_file:
        cookies = pickle.load(cookies_file)
    for i in cookies:
        if i.get('name') in ['wwrtx.refid', 'wwrtx.ref', 'wwrtx.i18n_lan']:
            continue
        driver.add_cookie(i)
Beispiel #4
0
def auth_driver(driver: WebDriver, user: "******") -> WebDriver:
    """
        Default AuthDriverFuncType type that sets a session cookie flask-login style
    :return: WebDriver
    """
    if user:
        # Set the cookies in the driver
        for cookie in get_auth_cookies(user):
            info = dict(name="session", value=cookie)
            driver.add_cookie(info)
    elif request.cookies:
        cookies = request.cookies
        for k, v in cookies.items():
            cookie = dict(name=k, value=v)
            driver.add_cookie(cookie)
    return driver
Beispiel #5
0
def close_privacy_popup(driver: WebDriver) -> None:
    """YouTube shows a cookie/privacy disclaimer on the first visit which prevents any other action.
    This functions sets the CONSENT cookie before visiting YouTube.
    """
    # To set cookies we need to visit the domain first. To avoid visiting the real website too early, we use robots.txt
    # Originally for web crawlers, but serves as a plain page for any domain.
    # https://en.wikipedia.org/wiki/Robots_exclusion_standard
    driver.get("https://www.youtube.com/robots.txt")
    driver.add_cookie({
        "name": "CONSENT",
        "value": "YES+US.en",
        "secure": True
    })
    # YouTube will ask if the user wants to sign in on the first visit, clicking no thanks is easy enough
    driver.get("https://www.youtube.com/")
    try:
        no_thanks_btn = WebDriverWait(driver, 20).until(
            EC.element_to_be_clickable((
                By.CSS_SELECTOR,
                'tp-yt-paper-button[aria-label^="No"][aria-label$="thanks"]')))
        no_thanks_btn.click()
    except:
        logging.warning("No login pop up found by close_privacy_popup")
Beispiel #6
0
def login_using_cookie_file(driver: WebDriver, cookie_file: str):
    """Restore auth cookies from a file. Does not guarantee that the user is logged in afterwards.
    Visits the domains specified in the cookies to set them, the previous page is not restored."""
    domain_cookies: Dict[str, List[object]] = {}
    with open(cookie_file) as file:
        cookies: List = json.load(file)
        # Sort cookies by domain, because we need to visit to domain to add cookies
        for cookie in cookies:
            try:
                domain_cookies[cookie["domain"]].append(cookie)
            except KeyError:
                domain_cookies[cookie["domain"]] = [cookie]

    for domain, cookies in domain_cookies.items():
        driver.get(domain_to_url(domain + "/robots.txt"))
        for cookie in cookies:
            cookie.pop("sameSite",
                       None)  # Attribute should be available in Selenium >4
            cookie.pop("storeId", None)  # Firefox container attribute
            try:
                driver.add_cookie(cookie)
            except:
                print(f"Couldn't set cookie {cookie['name']} for {domain}")
Beispiel #7
0
    def run(driver: WebDriver):
        nonlocal no
        if not no:
            elem = driver.find_element(By.XPATH, "//a[text()='投票']")
            if not elem:
                elem = driver.find_element(By.XPATH, "//a[text()='今日已投票']")
                if elem:
                    driver.delete_all_cookies()
                    driver.refresh()
                return None

            elem.click()
            elem_container = driver.find_element_by_class_name(
                "modal__container")
            if elem_container.is_displayed():
                no += 1
                return elem_container
        elif no == 1:
            elem_vote_options = driver.find_elements(
                By.XPATH, "//div/div/label[@class='label']")
            if not elem_vote_options:
                return None

            for elem in elem_vote_options:
                if not elem.is_displayed():
                    break
                elem.click()
                for_input = driver.find_element_by_id(
                    elem.get_attribute("for"))
                if not for_input.is_selected():
                    break
            else:
                no += 1
                return elem_vote_options
        if no == 2:

            driver.add_cookie({
                "name": "uuid",
                "value": generate_uuid(),
                "domain": ".businessweekly.com.tw",
                "size": 40,
            })
            elem = None
            try:
                elem = driver.find_element(By.XPATH, r"//a[text()='確認送出']")
                if elem and elem.is_enabled():
                    elem.click()
            except Exception as e:
                if driver.find_element_by_id("gdrp-el"):
                    driver.execute_script(
                        """document.getElementById("gdrp-el").remove();""")
            finally:
                elem_container = driver.find_element_by_class_name(
                    "modal__container")
                if elem_container and elem_container.find_element(
                        By.XPATH, "//img[@alt='投票完成']"):
                    no += 1
                    return True
                if "投票完成" in driver.page_source:
                    no += 1
                    return True

        return None