如何在Selenium Webdriver Python 3中使用Chrome配置文件

时间:2018-09-18 20:48:24

标签: python selenium google-chrome selenium-chromedriver chrome-profile

因此,每当我尝试通过添加来使用我的Chrome设置(我在默认浏览器中使用的设置)

options = webdriver.ChromeOptions()
options.add_argument("user-data-dir=C:\Users\... (my webdriver path)")
driver = webdriver.Chrome(executable_path="myPath", options=options)

它向我显示错误代码

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes n 16-17: truncated \UXXXXXXXX escape

以我的重击。我不知道这意味着什么,我很乐意得到任何帮助。预先感谢!

6 个答案:

答案 0 :(得分:2)

要获取路径,请按照以下步骤操作。

在搜索栏中键入以下内容,然后按Enter

enter image description here

然后将显示所有元数据。在那里找到个人资料的路径

enter image description here

答案 1 :(得分:1)

根据您的问题和代码试用,如果您想打开 Chrome浏览器会话,则可以使用以下选项:

  • 要使用默认的 Chrome配置文件

    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:card_view="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        card_view:cardBackgroundColor="#fffff">
    
        <android.support.v7.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="15dp">
    
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/color_white"
                android:orientation="vertical"
                android:padding="10dp">
    
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:fontFamily="@font/futura_medium"
                    android:text="Have you selected the right location ?"
                    android:textColor="@color/colorSection"
                    android:textSize="@dimen/text_sizes_medium" />
    
                <View
                    android:layout_width="match_parent"
                    android:layout_height="10dp" />
    
                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:fontFamily="@font/futura_medium"
                    android:lineSpacingExtra="4dp"
                    android:text="Your selected location seems to be little far off from your device location"
                    android:textColor="@color/colorTextPrimery"
                    android:textSize="@dimen/text_sizes_medium" />
    
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginBottom="10dp"
                    android:layout_marginTop="10dp"
                    android:gravity="center"
                    android:orientation="horizontal">
    
                    <TextView
                        android:id="@+id/text_no_thanks"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="center"
                        android:fontFamily="@font/futura_medium"
                        android:gravity="center"
                        android:text="NO THANKS"
                        android:textColor="@color/colorTextPrimery"
                        android:textSize="@dimen/text_sizes_smaller" />
    
                    <View
                        android:layout_width="20dp"
                        android:layout_height="match_parent" />
    
                    <TextView
                        android:id="@+id/text_change_location"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_gravity="end"
                        android:background="@drawable/selector_ligt_to_dark_no_radius"
                        android:fontFamily="@font/futura_medium"
                        android:gravity="center"
                        android:padding="6dp"
                        android:text="CHANGE LOCATION"
                        android:textColor="@color/color_white"
                        android:textSize="@dimen/text_sizes_smaller" />
                </LinearLayout>
            </LinearLayout>
        </android.support.v7.widget.CardView>
    
        <ImageView
            android:layout_width="20dp"
            android:layout_height="20dp"
            android:layout_marginLeft="60dp"
            android:background="@android:color/transparent"
            android:src="@drawable/arrow_white" />
    
    </FrameLayout>
    
  • 注意:您的默认Chrome配置文件将包含许多书签,扩展名,主题,cookie等。 Selenium 可能无法加载。因此,按照最佳做法,为您的 @Test 创建一个新的 chrome配置文件,并在配置文件中存储/保存/配置所需的数据。

  • 要使用自定义的 Chrome配置文件

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = webdriver.ChromeOptions()
    options.add_argument("user-data-dir=C:\\Users\\AtechM_03\\AppData\\Local\\Google\\Chrome\\User Data\\Default")
    driver = webdriver.Chrome(executable_path=r'C:\path\to\chromedriver.exe', chrome_options=options)
    driver.get("https://www.google.co.in")
    
  • 在这里您将找到有关How to open a Chrome Profile through Python

  • 的详细讨论

答案 2 :(得分:1)

这就是我设法在 php selenium webdriver 中使用 EXISTING CHROME PROFILE 的方式。 配置文件 6 不是我的默认配置文件。我不知道如何运行默认配置文件。重要的是不要在 chrome 选项参数之前添加 -- !选项的所有其他变体都不起作用!

<?php
//...
$chromeOptions = new ChromeOptions();
$chromeOptions->addArguments([
    'user-data-dir=C:/Users/MyUser/AppData/Local/Google/Chrome/User Data',
    'profile-directory=Profile 6'
]);

$host = 'http://localhost:4444/wd/hub'; // this is the default
$capabilities = DesiredCapabilities::chrome();
$capabilities->setCapability(ChromeOptions::CAPABILITY, $chromeOptions);
$driver = RemoteWebDriver::create($host, $capabilities, 100000, 100000);

要获取 chrome 配置文件的名称,请转到 chrome://settings/manageProfile,单击配置文件图标,然后单击“在我的桌面上显示配置文件快捷方式”。之后右键单击桌面配置文件图标并转到属性,在这里您将看到类似“C:\Program Files (x86)\Google\Chrome\Application\chrome.exe”--profile-directory="Profile 6"

此外,我建议您在运行此代码之前关闭所有 chrome 实例。此外,您可能还需要关闭 Chrome 设置 > 高级 > 系统 >“Google Chrome 关闭时继续运行后台应用程序”。

答案 3 :(得分:1)

接受的答案是错误的。这是官方的正确方法:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = webdriver.ChromeOptions()
options.add_argument(r"--user-data-dir=C:\path\to\chrome\user\data") #e.g. C:\Users\You\AppData\Local\Google\Chrome\User Data
options.add_argument(r'--profile-directory=YourProfileDir') #e.g. Profile 3
driver = webdriver.Chrome(executable_path=r'C:\path\to\chromedriver.exe', chrome_options=options)
driver.get("https://www.google.co.in")

要在 Windows 上找到配置文件文件夹,请右键单击您要使用的 Chrome 配置文件的桌面快捷方式,然后转到属性 -> 快捷方式,您将在“目标”文本框中找到它。

答案 4 :(得分:0)

请确保您已找到配置文件的正确路径,并且在所述路径中将转义反斜杠加倍。

例如,通常Windows上的默认配置文件位于:

"C:\\Users\\user\\AppData\\Local\\Google\\Chrome\\User Data\\Default"

答案 5 :(得分:0)

您确定要在user-data-dir参数中放入webdriver路径吗?这通常是您放置chrome配置文件的位置,例如“ C:\ Users \您的用户名\ AppData \ Local \ Google \ Chrome \ User Data \ Profile 1 \”。另外,您将需要在目录路径中使用双反斜杠或正斜杠(两者均可)。您可以使用os库测试您的路径是否有效 例如

import os
os.list("C:\\Users\\yourusername\\AppData\\Local\\Google\\Chrome\\User Data\\Profile 1")

将为您提供目录列表。

我也许还会偶尔添加一点,如果您在使用指定用户配置文件运行webdriver时设法使chrome崩溃,它似乎记录了配置文件中的崩溃,并且下次打开chrome时,您会收到Chrome浏览器提示还原页面的提示它异常退出后。就我个人而言,这有点令人头疼,并且由于此原因,我不再将用户配置文件与chromedriver一起使用。我找不到解决方法。其他人已经在这里报告过,但是他们的解决方案似乎都不适合我,或者不适合我的测试用例。 https://superuser.com/questions/237608/how-to-hide-chrome-warning-after-crash 如果您不指定用户个人资料,则似乎每次运行时都会创建一个新的(空白)临时文件