gpt4 book ai didi

r - 在Azure批处理上运行Selenium并行测试

转载 作者:行者123 更新时间:2023-12-03 07:36:52 37 4
gpt4 key购买 nike

我正在Windows 7上使用R的最新版本。

我想使用RSelenium并行运行许多测试,因此,我的问题是:

  • 运行许多RSelenium测试的推荐方法是什么?

  • 假设我要运行1000个测试,每个步骤需要1个小时。一个接一个地运行测试会花费很多时间(每天进行24个测试,因此总共cca为42天)。我知道如何使用doParallel和foreach包在我的计算机上并行运行测试: Run RSelenium in parallel
    但是有时候,这还不够。我想并行运行约100个测试。我曾尝试使用Azure Batch,但是在启动Selenium服务器时某些节点上会出现很多错误。

    更具体地说,我编写了dockerfile:
    FROM rocker/r-base:latest 

    RUN apt-get update \
    && apt-get install -y --no-install-recommends \
    libxml2-dev \
    libcurl4-openssl-dev \
    libssl-dev \
    gnupg2 \
    libfftw3-dev \
    libtiff-dev \
    libx11-dev \
    libcairo2-dev \
    libxt-dev \
    firefox

    #RUN add-apt-repository -y ppa:mozillateam/firefox-next

    ## Install Java
    RUN echo "deb http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" \
    | tee /etc/apt/sources.list.d/webupd8team-java.list \
    && echo "deb-src http://ppa.launchpad.net/webupd8team/java/ubuntu trusty main" \
    | tee -a /etc/apt/sources.list.d/webupd8team-java.list \
    && apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EEA14886 \
    && echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" \
    | /usr/bin/debconf-set-selections \
    && apt-get update \
    && apt-get install -y oracle-java8-installer \
    && update-alternatives --display java \
    && rm -rf /var/lib/apt/lists/* \
    && apt-get clean \
    && R CMD javareconf

    ## make sure Java can be found in rApache and other daemons not looking in R ldpaths
    RUN echo "/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/" > /etc/ld.so.conf.d/rJava.conf
    RUN /sbin/ldconfig

    # Install the R Packages from CRAN
    RUN Rscript -e 'install.packages(c("Cairo", "Rcpp", "RSelenium", "httr", "rvest", "imager", "RCurl"))'

    我已经使用 doAzureParallel包来并行执行许多脚本:
    # prepare Azure batch
    setwd("E:/data/R/web_scraping/zk_ba/azure")
    library(doAzureParallel)
    setVerbose(TRUE)
    setAutoDeleteJob(FALSE)
    generateCredentialsConfig("credentials.json")
    setCredentials("credentials.json")
    generateClusterConfig("cluster.json")
    cluster <- makeCluster("cluster.json")
    registerDoAzureParallel(cluster)
    getDoParWorkers()
    opt <- list(wait = FALSE)

    jobId <- foreach(
    i = 1:n_cluster,
    # .packages = c("RSelenium", "imager", "httr", "RCurl", "rvest"),
    # .combine = 'rbind',
    .errorhandling = "pass",
    .options.azure = opt,
    .export = c("metadata", "first_step", "parcele_df", "vlasnici_df", "status_teret_df", "n_cluster")
    ) %dopar% {

    library(RSelenium)
    library(imager)
    library(httr)
    library(RCurl)
    library(rvest)

    #-----------------------------------#
    # START SELENIUM AND PREPARE #
    #-----------------------------------#

    if (first_step == TRUE) {
    tryCatch({
    rD <<- RSelenium::rsDriver(
    browser = "firefox",
    extraCapabilities = list(
    "moz:firefoxOptions" = list(
    args = list('--headless')
    )
    )
    )
    }, error = function(e) NA)
    driver <<- rD$client
    driver$open()
    driver$navigate("http://www.e-grunt.ba/")
    Sys.sleep(3L)
    ..
    }

    但这在许多节点上返回错误:
    <simpleError in checkError(res): Undefined error in httr call. httr output: Failed to connect to localhost port 4567: Connection refused>

    在大量并行测试中需要使用RSelenium的情况下,什么是一般建议?

    最佳答案

    RSelenium默认连接到它在端口4567上设置的Selenium服务器。一旦并行节点之一通过此端口连接到服务器,其他任何节点都无法通过此端口连接。

    一种解决方案是在rsDriver循环中的foreach中添加以下参数:

    rD <<- RSelenium::rsDriver(
    port = 4567L + as.integer(i),
    browser = "firefox",
    extraCapabilities = list(
    "moz:firefoxOptions" = list(
    args = list('--headless')
    )
    )

    您可能必须检查端口与其他应用程序的冲突。

    关于r - 在Azure批处理上运行Selenium并行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53479771/

    37 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com