WebDriverException: ข้อผิดพลาดที่ไม่รู้จัก: ไฟล์ DevToolsActivePort ไม่มีอยู่ในขณะที่พยายามเริ่มต้นเบราว์เซอร์ Chrome


153

ฉันกำลังพยายามเปิดใช้งาน Chrome ด้วย URL เบราว์เซอร์เปิดตัวและไม่ทำอะไรเลยหลังจากนั้น

ฉันเห็นข้อผิดพลาดด้านล่างหลังจาก 1 นาที:

Unable to open browser with url: 'https://www.google.com' (Root cause: org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist
  (Driver info: chromedriver=2.39.562718 (9a2698cba08cf5a471a29d30c8b3e12becabb0e9),platform=Windows NT 10.0.15063 x86_64) (WARNING: The server did not provide any stacktrace information)

การกำหนดค่าของฉัน:

  • Chrome: 66
  • ChromeBrowser: 2.39.56

PSทุกอย่างทำงานได้ดีใน Firefox


1
คุณสามารถอัปเดตคำถามด้วยรหัสที่ทำให้เกิดข้อผิดพลาดนี้ได้หรือไม่
GPT14

ฉันได้รับข้อผิดพลาดนี้เมื่อ vncserver ขัดข้องและฉันไม่มีหน้าจอ X อีกต่อไป
xtian

คำตอบ:


71

ข้อความผิดพลาดนี้ ...

org.openqa.selenium.WebDriverException: unknown error: DevToolsActivePort file doesn't exist 

... แสดงว่าChromeDriverไม่สามารถเริ่มต้น / วางไข่ในเว็บเบราว์เซอร์ใหม่เช่นเซสชันChrome Browser

การทดสอบโค้ดของคุณและข้อมูลการกำหนดเวอร์ชันของไบนารีทั้งหมดจะทำให้เรามีคำแนะนำบางอย่างเกี่ยวกับสิ่งที่ผิดพลาด

อย่างไรก็ตามตามเพิ่ม - ปิดการใช้งาน-dev-shm การใช้งานเพื่อเริ่มต้นการเปิดตัวธงดูเหมือนว่าการเพิ่มอาร์กิวเมนต์--disable-dev-shm-usageจะแก้ปัญหาชั่วคราว

หากคุณต้องการเริ่มต้น / ขยายเซสชันเบราว์เซอร์ Chromeใหม่คุณสามารถใช้โซลูชันต่อไปนี้:

System.setProperty("webdriver.chrome.driver", "C:\\path\\to\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("start-maximized"); // open Browser in maximized mode
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("--no-sandbox"); // Bypass OS security model
WebDriver driver = new ChromeDriver(options);
driver.get("https://google.com");

disable-dev-SHM การใช้งาน

ตามbase_switches.cc disable-dev-shm-usageน่าจะใช้ได้เฉพาะบนLinux OS :

#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
// The /dev/shm partition is too small in certain VM environments, causing
// Chrome to fail or crash (see http://crbug.com/715363). Use this flag to
// work-around this issue (a temporary directory will always be used to create
// anonymous shared memory files).
const char kDisableDevShmUsage[] = "disable-dev-shm-usage";
#endif

ในการสนทนาเพิ่มตัวเลือกเพื่อใช้ / tmp แทน / dev / shm David กล่าวถึง:

ฉันคิดว่ามันจะขึ้นอยู่กับว่า / dev / shm และ / tmp ติดตั้งอย่างไร หากทั้งสองติดตั้งเป็น tmpfs ฉันคิดว่าจะไม่มีความแตกต่าง ถ้าด้วยเหตุผลบางอย่าง / tmp ไม่ได้ถูกแมปเป็น tmpfs (และฉันคิดว่าถูกแมปเป็น tmpfs ตามค่าเริ่มต้นโดย systemd) การจัดการหน่วยความจำที่ใช้ร่วมกันของโครมจะแมปไฟล์ในหน่วยความจำเสมอเมื่อสร้างไฟล์ที่ไม่ระบุตัวตนร่วม แตกต่างกันมาก ฉันเดาว่าคุณสามารถบังคับใช้การทดสอบระบบโทรมาตรด้วยการเปิดใช้งานการตั้งค่าสถานะและดูว่ามันจะไปอย่างไร

สำหรับเหตุผลที่ไม่ได้ใช้งานเป็นค่าเริ่มต้นมันถูกผลักกลับโดยทีมหน่วยความจำที่ใช้ร่วมกันฉันคิดว่ามันควรจะใช้ / dev / shm สำหรับหน่วยความจำที่ใช้ร่วมกันโดยค่าเริ่มต้น

ในที่สุดสิ่งทั้งหมดนี้ควรจะย้ายไปใช้ memfd_create แต่ฉันไม่คิดว่ามันจะเกิดขึ้นได้ตลอดเวลาในเร็ว ๆ นี้เนื่องจากมันจะต้องมีการจัดการหน่วยความจำ Chrome อีกครั้งอย่างมีนัยสำคัญ


ส่งท้าย

นี่คือลิงค์ไปยังเรื่องSandbox


8
แต่สิ่งที่ทำให้เกิดข้อผิดพลาดเฉพาะนี้เกี่ยวกับDevToolsActivePort file doesn't existและทำไมมันก็เริ่มโผล่ขึ้นมา?

3
รายการ "การพิจารณาเพิ่มเติม" - ดูเหมือนว่าพวกเขาจะมีผลบังคับใช้กับปัญหานี้ค่อนข้างมาก โดยเฉพาะอย่างยิ่งสถานการณ์แบบนี้ซึ่งมันไม่ได้ถูกจัดตั้งขึ้นอย่างแน่นอนว่าอะไรทำให้เกิดปัญหา
Pete Kelley

5
จากส่วนที่ถูกลบของโพสต์ของ @ DebanjanB อาจเกิดจากการใช้ Chromedriver ซึ่งไม่รองรับเวอร์ชันของ Chrome ที่ติดตั้ง สิ่งนี้อาจเกิดขึ้นได้เช่นหากมีการอัปเกรด Chrome โดยไม่ต้องอัปเกรด Chromedriver
expz

สิ่งนี้ใช้เพื่อแก้ปัญหาสำหรับฉันมันไม่ได้อยู่ในระบบปัจจุบันของฉัน (Ubuntu 18 + Python 3.7)
tw0000

3
ในกรณีนี้จะช่วยให้คนอื่นเพียงแค่เพิ่มdisable-dev-shm-usageไม่เพียงพอ ฉันต้องเพิ่ม --no-sandboxเพื่อให้มันใช้งานได้ นี่คือการแก้ไขที่สมบูรณ์สำหรับฉันสำหรับ Selenium-java:chromeOptions.addArguments("--no-sandbox", "--disable-dev-shm-usage");
George Pantazes

52

ฉันเริ่มเห็นปัญหานี้ในวันจันทร์ที่ 2018-06-04 การทดสอบของเราทำงานในแต่ละวันทำงาน ดูเหมือนว่าสิ่งเดียวที่เปลี่ยนแปลงคือรุ่น google-chrome (ซึ่งได้รับการอัปเดตเป็นปัจจุบัน) JVM และ Selenium เป็นรุ่นล่าสุดบนกล่อง Linux (Java 1.8.0_151, ซีลีเนียม 3.12.0, google-chrome 67.0.3396.62 และ Xvfb วิ่ง)
การเพิ่มอาร์กิวเมนต์โดยเฉพาะ " - no-sandbox " และ " --disable-dev-shm-usage " หยุดข้อผิดพลาด ฉันจะตรวจสอบปัญหาเหล่านี้เพื่อค้นหาข้อมูลเพิ่มเติมเกี่ยวกับเอฟเฟกต์และคำถามอื่น ๆ ในสิ่งที่เรียกให้ Google-chrome อัปเดต

ChromeOptions options = new ChromeOptions();
        ...
        options.addArguments("--no-sandbox");
        options.addArguments("--disable-dev-shm-usage");

ฉันต้องการชี้แจงว่ารหัสนี้ใช้งานทุกวันในกล่อง Ubuntu Linux แต่รหัสเทียบเท่าบนเดสก์ท็อป Windows ก็ใช้งานได้แม้ในวันจันทร์ ฉันไม่พบข้อมูลเกี่ยวกับการทำงานของไฟล์ DevToolsActivePort สำหรับอะไรและมันก็มีประโยชน์เช่นกัน PK
Pete Kelley

1
ตัวเลือกเหล่านี้หยุดข้อผิดพลาดสำหรับฉันเช่นกัน pd: ใช้ Rails stack
Mario Pérez

ฉันยังคงได้รับ[java] [1536892035.965][SEVERE]: Timed out receiving message from renderer: 60.000ข้อผิดพลาดแม้ในกรณีนี้
Jonathan

@Jonathan - สวัสดี! คุณสามารถให้รายละเอียดเพิ่มเติมเช่นระบบปฏิบัติการรุ่นใดของคอมโพเนนต์ที่คุณใช้หรือคุณใช้กระบวนการนี้อย่างไร
Pete Kelley

@Toby: สวัสดี! ฉันไม่ได้ตั้งใจจะบอกว่าตำแหน่งนั้นสร้างความแตกต่างเพียงแค่ใช้พารามิเตอร์เหล่านั้นให้น้อยที่สุด ดูเหมือนว่าค่าเริ่มต้นบางอย่างที่ฉันเชื่อถือได้เปลี่ยนไปเมื่อมีการอัพเกรดเกิดขึ้น รายละเอียดอื่น ๆ คือระบบหรือข้อความของคุณที่คุณให้อาจช่วยได้
Pete Kelley

35

เราประสบปัญหาเดียวกันกับทาสเจนกินส์ของเรา (เครื่องลินุกซ์) และลองตัวเลือกทั้งหมดข้างต้น

สิ่งเดียวที่ช่วยคือการตั้งค่าการโต้แย้ง

chrome_options.add_argument('--headless')

แต่เมื่อเราตรวจสอบเพิ่มเติมพบว่าหน้าจอ XVFB ไม่ได้เริ่มคุณสมบัติและนั่นทำให้เกิดข้อผิดพลาดนี้ หลังจากที่เราแก้ไขหน้าจอ XVFB แล้วจะสามารถแก้ไขปัญหาได้


2
วิธีนี้แก้ไขปัญหาของฉันได้เมื่อใช้งาน C # (ในกรณีนี้ตัวเลือกจะมีลักษณะดังนี้: options.AddArgument ("- headless");
ozz

XVFB เป็นปัญหาสำหรับฉัน
lucaswxp

23

ฉันมีปัญหาเดียวกันในหลาม ข้างต้นช่วย นี่คือสิ่งที่ฉันใช้ในหลาม -

chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome('/path/to/your_chrome_driver_dir/chromedriver',chrome_options=chrome_options)

ฉันแก้ไขปัญหาของฉันด้วยการอัปเกรด Chrome (ฉันมี Chromedrive ล่าสุดแล้ว) ดังนั้นฉันจึงต้องอัปเกรดเบราว์เซอร์ตามปกติเช่นกัน
axel_ande

18

ปรับปรุง:

ฉันสามารถแก้ไขปัญหาได้และตอนนี้ฉันสามารถเข้าถึงโครเมี่ยมพร้อม URL ที่ต้องการ

ผลลัพธ์ของการลองใช้โซลูชันที่ให้มา:

ฉันลองการตั้งค่าทั้งหมดตามที่ระบุไว้ด้านบน แต่ไม่สามารถแก้ไขปัญหาได้

คำอธิบายเกี่ยวกับปัญหา:

ตามการสังเกตของฉันไฟล์ DevToolsActivePort ไม่มีอยู่เกิดขึ้นเมื่อ chrome ไม่พบการอ้างอิงในโฟลเดอร์ scoped_dirXXXXXX

ขั้นตอนดำเนินการเพื่อแก้ไขปัญหา

  1. ฉันฆ่ากระบวนการโครเมี่ยมและกระบวนการขับโครเมี่ยมทั้งหมดแล้ว
  2. เพิ่มรหัสด้านล่างเพื่อเรียกใช้โครเมียม

    System.setProperty("webdriver.chrome.driver","pathto\\chromedriver.exe");    
    ChromeOptions options = new ChromeOptions();
    options.setExperimentalOption("useAutomationExtension", false);
    WebDriver driver = new ChromeDriver(options);
    driver.get(url);
    

การใช้ขั้นตอนข้างต้นทำให้ฉันสามารถแก้ไขปัญหาได้

ขอบคุณสำหรับคำตอบของคุณ


3
คุณรู้หรือไม่ว่าสิ่งที่ส่งผลกระทบต่อการใช้งานขยายมี? มันปิดการใช้งานส่วนขยายสำหรับระบบอัตโนมัติ (ภาพหน้าจอ / การควบคุม ฯลฯ ) ไม่ได้? การถือกำเนิดของ DevTools ไม่ควรทำให้การเปลี่ยนแปลงนี้ไม่มีผลกระทบหรือไม่? codereview.chromium.org/2785413002
Toby

10

ฉันกำลังเผชิญปัญหาเดียวกันเมื่อเร็ว ๆ นี้และหลังจากการทดลองและข้อผิดพลาดบางอย่างก็ใช้ได้สำหรับฉันเช่นกัน

ต้องอยู่ด้านบน:

options.addArguments("--no-sandbox"); //has to be the very first option

BaseSeleniumTests.java

public abstract class BaseSeleniumTests {

    private static final String CHROMEDRIVER_EXE = "chromedriver.exe";
    private static final String IEDRIVER_EXE = "IEDriverServer.exe";
    private static final String FFDRIVER_EXE = "geckodriver.exe";
    protected WebDriver driver;

    @Before
    public void setUp() {
        loadChromeDriver();
    }

    @After
    public void tearDown() {
        if (driver != null) {
            driver.close();
            driver.quit();
        }
    }

    private void loadChromeDriver() {
        ClassLoader classLoader = getClass().getClassLoader();
        String filePath = classLoader.getResource(CHROMEDRIVER_EXE).getFile();
        DesiredCapabilities capabilities = DesiredCapabilities.chrome();
        ChromeDriverService service = new ChromeDriverService.Builder()
                .usingDriverExecutable(new File(filePath))
                .build();
        ChromeOptions options = new ChromeOptions();
        options.addArguments("--no-sandbox"); // Bypass OS security model, MUST BE THE VERY FIRST OPTION
        options.addArguments("--headless");
        options.setExperimentalOption("useAutomationExtension", false);
        options.addArguments("start-maximized"); // open Browser in maximized mode
        options.addArguments("disable-infobars"); // disabling infobars
        options.addArguments("--disable-extensions"); // disabling extensions
        options.addArguments("--disable-gpu"); // applicable to windows os only
        options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
        options.merge(capabilities);
        this.driver = new ChromeDriver(service, options);
    }

}

GoogleSearchPageTraditionalSeleniumTests.java

@RunWith(SpringRunner.class)
@SpringBootTest
public class GoogleSearchPageTraditionalSeleniumTests extends BaseSeleniumTests {

    @Test
    public void getSearchPage() {
        this.driver.get("https://www.google.com");
        WebElement element = this.driver.findElement(By.name("q"));
        assertNotNull(element);
    }

}

pom.xml

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <scope>test</scope>
        </dependency>
</dependencies>

น่าสนใจ! คุณจะสร้างไฟล์. side ได้อย่างไร นี่เป็นสิ่งที่บุคคล QA ทำด้วยตนเองหรือไม่?
Nital

คุณใช้ซีลีเนียม IDE เพื่อบันทึกการทดสอบ ผลลัพธ์คือไฟล์. side มันทำงานได้ดีโดยใช้ IDE แต่ฉันพยายามเรียกใช้โดยใช้ซีลีเนียม - ไซด์รันเนอร์ แต่พบปัญหาทุกอย่างกับโครมาไดรฟ
pabrams

ต้องเป็นตัวเลือกแรก - ใช้เวลาหลายวันเพื่อหาฮ่าฮ่า
cuniculus

ขอบคุณ! การเพิ่ม "- no-sandbox" แก้ปัญหาของฉัน
matabares

7

ในกรณีของฉันในสภาพแวดล้อมต่อไปนี้:

  • Windows 10
  • หลาม 3.7.5
  • Google Chrome รุ่น 80 และ ChromeDriver ที่เกี่ยวข้องในเส้นทาง C:\Windows
  • ซีลีเนียม 3.141.0

ฉันต้องการที่จะเพิ่มการขัดแย้ง--no-sandboxและ--remote-debugging-port=9222ไปที่ChromeOptionsวัตถุและเรียกใช้รหัสเป็นผู้ใช้ผู้ดูแลระบบโดย lunching Powershell / cmd ในฐานะผู้ดูแล

นี่คือรหัสที่เกี่ยวข้อง:

options = webdriver.ChromeOptions()
options.add_argument('headless')
options.add_argument('--disable-infobars')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--no-sandbox')
options.add_argument('--remote-debugging-port=9222')
driver = webdriver.Chrome(options=options)

1
เหมือนกันสำหรับฉันกับนักเทียบท่ากับ Ubuntu 18.04, py3.7, โครเมี่ยม (ไดรเวอร์) 80
patroqueeet

สิ่งนี้ใช้ได้สำหรับฉันโดยไม่มีปัญหาเพิ่มเติม ฉันเพิ่งเริ่มพบปัญหานี้วันนี้ แต่เนื่องจากคำตอบของคุณจะได้รับการแก้ไขอย่างรวดเร็ว! สภาพแวดล้อมของฉันก็เหมือนกับคุณ
Ryan Harris

6

ฉันพบปัญหานี้ใน Ubuntu 20 กับ Python Selenium หลังจากดาวน์โหลด Chromedriver แยกต่างหากก่อนแล้วจึงใช้ sudo apt install chromium-browserแม้ว่าจะเป็นรุ่นเดียวกันก็ตามที่เกิดขึ้น

การแก้ไขของฉันคือการใช้ไดรเวอร์โครเมี่ยมที่ให้มาพร้อมกับแพ็คเกจ repo ที่

/snap/bin/chromium.chromedriver

driver = webdriver.Chrome(chrome_options=options, executable_path='/snap/bin/chromium.chromedriver')

4

ตามที่ระบุไว้ในคำตอบอื่น ๆ นี้ :

ข้อความแสดงข้อผิดพลาดนี้ ... แสดงว่า ChromeDriver ไม่สามารถเริ่มต้น / วางไข่เว็บเบราเซอร์ใหม่เช่นเซสชัน Chrome Browser

ในบรรดาสาเหตุที่เป็นไปได้ฉันอยากจะพูดถึงความจริงที่ว่าในกรณีที่คุณใช้ Chromium ที่ไม่มีส่วนหัวผ่าน Xvfb คุณอาจจำเป็นต้องexportใช้DISPLAYตัวแปร: ในกรณีของฉันฉันมีอยู่แล้ว (ตามที่แนะนำ) --disable-dev-shm-usageและ--no-sandboxตัวเลือกทุกอย่างคือ ทำงานได้ดี แต่ในการติดตั้งใหม่ที่ใช้งานล่าสุด (ณ เวลาที่เขียน) Ubuntu 18.04 ข้อผิดพลาดนี้เริ่มที่จะเกิดขึ้นและการแก้ไขที่เป็นไปได้เพียงอย่างเดียวคือการดำเนินการexport DISPLAY=":20"(ก่อนหน้านี้เริ่ม Xvfb ด้วยXvfb :20&)


OMG ขอบคุณ ฉันทำการเปลี่ยนแปลงบางอย่างกับคอนเทนเนอร์นักเทียบท่าของเราและฉันทิ้ง xvfb โดยไม่ตั้งใจ ฉันจะไม่พบสิ่งนี้ถ้าคุณไม่ได้ออกจากที่นี่ :-)
Ryan Shillington

3

ฉันยังต้องเผชิญกับปัญหานี้ในขณะที่การบูรณาการกับเซิร์ฟเวอร์เจนกินส์ผมก็ใช้รากของผู้ใช้สำหรับ Jenkin งานที่ปัญหาได้รับการแก้ไขเมื่อผมเปลี่ยนผู้ใช้ให้กับผู้ใช้อื่นฉันไม่แน่ใจว่าทำไมข้อผิดพลาดนี้เกิดขึ้นกับผู้ใช้รูท

  • Google Chrome เวอร์ชัน 71.0
  • ChromeDriver เวอร์ชัน 2.45
  • CentOS7 เวอร์ชั่น 1.153

ผู้ใช้ที่ไม่ใช่รูททำงานให้ฉันฉันมีไดร์เวอร์รุ่นโครเมียมที่ถูกต้องสำหรับโครเมียม
TicJit

2

ในกรณีของฉันมันเกิดขึ้นเมื่อฉันพยายามใช้โปรไฟล์ผู้ใช้เริ่มต้นของฉัน:

...
options.addArguments("user-data-dir=D:\\MyHomeDirectory\\Google\\Chrome\\User Data");
...

โครเมียมที่ถูกกระตุ้นนี้จะนำกระบวนการที่กำลังทำงานอยู่ในพื้นหลังกลับมาใช้ใหม่กระบวนการดังกล่าวที่เริ่มต้นโดย chromedriver.exe ก็สิ้นสุดลง

การแก้ไข: ทำลายกระบวนการ chrome.exe ทั้งหมดที่ทำงานในเบื้องหลัง


ฉันมีปัญหาที่คล้ายกัน แต่ใน linux - กระบวนการ chrome ของฉันไม่ได้ออกอย่างถูกต้องหลังจากสคริปต์ขัดข้องและพวกเขาถูกนำมาใช้ซ้ำอย่างไม่ถูกต้อง ฆ่าพวกเขาแก้ปัญหา
jeremycg

2

ปรับปรุงความสามารถใน conf.js เป็น

exports.config = {
  seleniumAddress: 'http://localhost:4444/wd/hub',
  specs: ['todo-spec.js'],
  capabilities: {
    browserName: 'chrome',
    chromeOptions: {
      args: ['--disable-gpu', '--no-sandbox', '--disable-extensions', '--disable-dev-shm-usage']
    }
  },

};

2

ในกรณีของฉันฉันพยายามสร้าง jar ที่รันได้บน Windows OS ด้วยเบราว์เซอร์ chrome และต้องการเรียกใช้โหมดเดียวกันบน headless mode ใน unix box โดยมี CentO อยู่ และฉันก็ชี้ไบนารีของฉันไปยังไดรเวอร์ที่ฉันได้ดาวน์โหลดและบรรจุด้วยชุดของฉัน สำหรับฉันปัญหานี้ยังคงเกิดขึ้นโดยไม่คำนึงถึงการเพิ่มด้านล่าง:

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--no-sandbox");
System.setProperty("webdriver.chrome.args", "--disable-logging");
System.setProperty("webdriver.chrome.silentOutput", "true");
options.setBinary("/pointing/downloaded/driver/path/in/automationsuite");
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("disable-infobars"); // disabling infobars
options.addArguments("--disable-extensions"); // disabling extensions
options.addArguments("--disable-gpu"); // applicable to windows os only
options.addArguments("--disable-dev-shm-usage"); // overcome limited resource problems
options.addArguments("window-size=1024,768"); // Bypass OS security model
options.addArguments("--log-level=3"); // set log level
options.addArguments("--silent");//
options.setCapability("chrome.verbose", false); //disable logging
driver = new ChromeDriver(options);

โซลูชันที่ฉันได้ลองและทำงานให้ฉันคือดาวน์โหลด chrome และเครื่องมือของมันในกล่องโฮสต์ VM / Unix ติดตั้งและชี้ไบนารีไปที่สิ่งนี้ในชุดอัตโนมัติและบิงโก! มันได้ผล :)

คำสั่งดาวน์โหลด:

wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm

ติดตั้งคำสั่ง:

sudo yum install -y ./google-chrome-stable_current_*.rpm

อัปเดตชุดโปรแกรมด้วยเส้นทางไบนารีด้านล่างของ google-chrome:

options.setBinary("/opt/google/chrome/google-chrome");

และ .. มันใช้งานได้!


เราจะเพิ่มรหัสนี้ที่ไหน ฉันไม่เห็นรหัส C # ในไฟล์. side ของฉัน
pabrams

1

ฉันมีปัญหาเดียวกัน แต่ในกรณีของโครเมียมก่อนหน้านี้ถูกติดตั้งในโฟลเดอร์ temp ผู้ใช้หลังจากนั้นถูกติดตั้งใหม่ลงในไฟล์โปรแกรม วิธีแก้ปัญหาที่ให้ไว้ที่นี่ก็ไม่ได้ช่วยฉัน แต่ถ้าให้เส้นทางไปที่ chrome.exe ใช้งานได้ทั้งหมด:

chromeOptions.setBinary("C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe");

ฉันหวังว่านี่จะช่วยให้ใครบางคน =)


ดูเหมือนจะตรงข้ามกับ @shiuu fix ด้านล่างแน่นอน
Toby

1

ไม่มีวิธีแก้ปัญหาสำหรับฉัน แต่นี่เป็นวิธีแก้ปัญหา:

maxcounter=5
for counter in range(maxcounter):
    try:           
        driver = webdriver.Chrome(chrome_options=options,
                          service_log_path=logfile,
                          service_args=["--verbose", "--log-path=%s" % logfile])
        break
    except WebDriverException as e:
        print("RETRYING INITIALIZATION OF WEBDRIVER! Error: %s" % str(e))
        time.sleep(10)
        if counter==maxcounter-1:
            raise WebDriverException("Maximum number of selenium-firefox-webdriver-retries exceeded.")

1

คุณสามารถรับข้อผิดพลาดนี้เพียงส่งข้อโต้แย้งที่ไม่ดีไปยัง Chrome ตัวอย่างเช่นถ้าฉันส่ง"headless"เป็นอาร์กิวเมนต์ให้กับ C # ChromeDriver มันจะเป็นการยิงที่ยอดเยี่ยม หากฉันทำผิดและใช้ไวยากรณ์ผิด"--headless"ฉันจะได้รับDevToolsActivePort file doesn't existข้อผิดพลาด


1

ฉันพบปัญหาเดียวกันฉันใช้เบราว์เซอร์ UBUNTU, PYTHON และ OPERAเบราว์เซอร์ ในกรณีของฉันปัญหาเกิดขึ้นเพราะฉันมีรุ่น operadriver ที่ล้าสมัย

วิธีแก้ปัญหา: 1. ตรวจสอบให้แน่ใจว่าคุณติดตั้งเวอร์ชันล่าสุดของเบราว์เซอร์โอเปร่า (อย่าใช้โอเปร่าเบต้าหรือนักพัฒนาโอเปร่า) เพื่อไปที่เว็บไซต์อย่างเป็นทางการของโอเปร่าและดาวน์โหลดจากเวอร์ชั่นล่าสุดของ opera_stable

  1. ติดตั้งไดรเวอร์ Opera ล่าสุด (หากคุณติดตั้งไดรเวอร์ Opera แล้วคุณต้องลบมันออกก่อนใช้ sudo rm ... )

wget https://github.com/operasoftware/operachromiumdriver/releases/download/v.80.0.3987.100/operadriver_linux64.zip

   unzip operadriver_linux64.zip
   sudo mv operadriver /usr/bin/operadriver
   sudo chown root:root /usr/bin/operadriver
   sudo chmod +x /usr/bin/operadriver

ในกรณีของฉันล่าสุดคือ 80.0.3987 อย่างที่คุณเห็น

  1. นอกจากนี้ฉันยังติดตั้ง Chromedriver (แต่เนื่องจากฉันทำก่อนการทดสอบฉันไม่ทราบว่าสิ่งนี้จำเป็น) เพื่อติดตั้ง Chromedriver ให้ทำตามขั้นตอนในขั้นตอนก่อนหน้า: v

  2. สนุกและขอบคุณ!

ตัวอย่างซีลีเนียม

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
driver = webdriver.Opera()
driver.get("http://www.python.org")
assert "Python" in driver.title
elem = driver.find_element_by_name("q")
elem.clear()
elem.send_keys("pycon")
elem.send_keys(Keys.RETURN)
assert "No results found." not in driver.page_source
driver.quit()

0

ดูเหมือนว่ามีสาเหตุที่เป็นไปได้มากมายสำหรับข้อผิดพลาดนี้ ในกรณีของเราเกิดข้อผิดพลาดขึ้นเนื่องจากเรามีโค้ดสองบรรทัดต่อไปนี้:

System.setProperty("webdriver.chrome.driver", chromeDriverPath);
chromeOptions.setBinary(chromeDriverPath);

มันแก้ไขได้ด้วยการลบบรรทัดที่สอง


ดูเหมือนตรงข้ามที่แน่นอนของ @ sergiy-konoplyaniy แก้ไขด้านบน: '(
Toby

ใน setBinary ของเราเราพยายามตั้งไดรเวอร์ Chrome ซึ่งดูเหมือนผิดพลาด @ sergiy-konoplyaniy แก้ไขชุด chrome.exe ผ่าน setBinary
shiuu

คุณมีรหัสนี้ที่ไหน ทั้งหมดที่ฉันมีคือไฟล์. side และไม่มีรหัส C # อยู่
pabrams

0

ฉันพบปัญหาเดียวกันกับที่ใช้งาน Chrome ผ่าน Behat / Mink และ Selenium ในคอนเทนเนอร์ Docker หลังจากเล่นซอฉันก็มาถึงสิ่งต่อไปนี้behat.ymlซึ่งส่งสวิตช์ดังกล่าวข้างต้น โปรดทราบว่าพวกเขาทุกคนจำเป็นต้องใช้เพื่อให้มันทำงานได้สำเร็จ

default:
    extensions:
        Behat\MinkExtension:
            base_url: https://my.app/
            default_session: selenium2
            selenium2:
                browser: chrome
                capabilities:
                    extra_capabilities:
                        chromeOptions:
                            args:
                                - "headless"
                                - "no-sandbox"
                                - "disable-dev-shm-usage"

0

ในกรณีของฉันฉันอยู่ในสภาพแวดล้อมที่ Kubernetes ซึ่งฉันไม่สามารถใช้ TMPDIR เริ่มต้นได้เนื่องจากจะเติมไดเรกทอรีชั่วคราวด้วยขยะ

ดังนั้นฉันจึงใช้สิ่งนี้เพื่อใช้ tmpdir อื่น:

driver = new ChromeDriver(new ChromeDriverService.Builder()
                    .withEnvironment(ImmutableMap.of("TMPDIR", customTmpPath))
                    .build(), options);

แต่ตอนนี้ฉันได้อัปเกรดทุกอย่างเป็นรุ่นล่าสุดแล้วดูเหมือนจะไม่ทำงานอีกต่อไป ฉันจะต้องหาวิธีใหม่ในการทำเช่นนี้


0

มันเกิดขึ้นเมื่อ Chromedriver ไม่สามารถรู้ได้ว่าโครมพอร์ตใดที่ใช้ดีบั๊ก

สาเหตุหนึ่งที่เป็นไปได้คือข้อบกพร่องแบบเปิดที่มีHKEY_CURRENT_USER \ Software \ Policies \ Google \ Chrome \ UserDataDir

แต่ในกรณีสุดท้ายของฉันมันเป็นสาเหตุอื่นที่ไม่สามารถระบุได้

โชคดีที่การตั้งค่าหมายเลขพอร์ตทำงานด้วยตนเอง:

final String[] args = { "--remote-debugging-port=9222" };
options.addArguments(args);
WebDriver driver = new ChromeDriver(options);

2
มันเป็นพอร์ตคงที่หรือไม่ หรือฉันจะหามันได้ที่ไหน
Mike Shiyan

0

หมายเลขพอร์ตผิดในกรณีของฉัน ตรวจสอบว่าหมายเลขพอร์ตเมื่อเริ่มต้นเซิร์ฟเวอร์ Selenium เหมือนกับในสคริปต์ของคุณหรือไม่


-2

ฉันแก้ปัญหานี้ด้วยการติดตั้งyum -y install gtk3-devel gtk3-devel-docs"มันใช้ได้ดี

งาน env ของฉันคือ:

Selenium Version 3.12.0
ChromeDriver Version v2.40
Chrome 68 level

ก่อน:
ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่

หลังจาก:
ป้อนคำอธิบายรูปภาพที่นี่ ป้อนคำอธิบายรูปภาพที่นี่


9
จากการตรวจสอบ: โปรดอย่าโพสต์ข้อความในภาพ แก้ไขคำตอบของคุณและแทนที่ภาพเหล่านั้นด้วยข้อความ ขอบคุณ
sɐunıɔןɐqɐp

1
สิ่งนี้จะช่วยแก้ปัญหาสำหรับทุกคนหรือไม่ นี่ไม่ได้แก้ปัญหาให้ฉัน
Bendram

-2

เนื่องจากนี่เป็นข้อความที่ใช้งานมากที่สุดสำหรับข้อผิดพลาดประเภทนี้ฉันจึงต้องการพูดถึงโซลูชันของฉัน (หลังจากใช้เวลาหลายชั่วโมงเพื่อแก้ไขปัญหานี้)

บน Ubuntu 18.04 โดยใช้ Chrome 70 และ Chromedriver 2.44 และ Python3 ฉันได้รับข้อผิดพลาด DevToolsActivePort เดียวกันแม้ว่าฉันจะปิดการใช้งานตัวเลือกทั้งหมดที่ระบุไว้ข้างต้น ไฟล์บันทึก Chromedriver เช่นเดียวกับ ps แสดงให้เห็นว่า Chromedriver I ที่ตั้งค่าใน chrome_options.binary_location กำลังทำงานอยู่ แต่จะให้ข้อผิดพลาด DevToolsActivePort เสมอ เมื่อฉันลบ chrome_options.binary_location = '.... ' และเพิ่มลงในการสร้าง webdriver ฉันทำงานได้ดี webdriver.Chrome ('/ พา ธ ไปที่ ... / chromedriver', chrome_options = chrome_options)

ขอบคุณทุกคนสำหรับความคิดเห็นของคุณที่ทำให้ฉันเข้าใจและแก้ไขปัญหาได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.