【问题标题】:Is there a way to do command+a to highlight all text on a page with Rselenium? Or another way to highlight all text on a page?有没有办法使用 Rselenium 来使用 command+a 突出显示页面上的所有文本?或者另一种突出显示页面上所有文本的方法?
【发布时间】:2017-07-17 12:42:36
【问题描述】:

也许有像这样的 sendkeystoactiveelement 函数?

sendKeysToActiveElement( 列表(键='command_meta',“U + 0074”) )

U+0074 是小写“a”的 UTF 码

【问题讨论】:

    标签: r web-scraping rselenium


    【解决方案1】:

    您可能会发现感兴趣的this article from zevross.com。它将以下代码发布为页面上的“抢先预览”

    # Sneak preview of code for interacting with a web page with RSelenium
    # a proper blog post with explanation will follow.
    
    library(RSelenium)
    # make sure you have the server
    checkForServer()
    
    # use default server 
    startServer()
    remDr<-remoteDriver$new()
    
    
    # send request to server
    url<-"https://programs.iowadnr.gov/animalfeedingoperations/FacilitySearch.aspx?Page=0"
    remDr$open(silent = TRUE) #opens a browser
    remDr$navigate(url)
    
    
    # identify search button and click
    searchID<-'//*[@id="ctl00_foPageContent_SearchButton"]'
    webElem<-remDr$findElement(value = searchID)
    webElem$clickElement()
    
    # identify the table
    tableID<-'//*[@id="ctl00_foPageContent_Panel1"]/div[2]/table'
    webElem<-remDr$findElement(value = tableID)
    
    doc<-htmlParse(remDr$getPageSource()[[1]])
    
    tabledat<-readHTMLTable(doc)[[17]]
    tabledat[,]<-lapply(tabledat[,],
        function(x) gsub("ÃÂ", "", as.character(x)))
    tabledat<-tabledat[-nrow(tabledat),-1]
    # go to next page
    nextID<-'//*[@id="ctl00_foPageContent_FacilitySearchRepeater_ctl11_PagePlus1"]'
    webElem<-remDr$findElement(value = nextID)
    webElem$clickElement()
    

    这段代码作为提取数据的函数(随后被映射):

    # FUNCTION from help for chartr 
    capwords<-function(s, strict = FALSE) {
      cap<-function(s) paste(toupper(substring(s, 1, 1)),
            {s<-substring(s, 2); if(strict) tolower(s) else s},
            sep = "", collapse = " " )
        sapply(strsplit(s, split = " "),
            cap, USE.NAMES = !is.null(names(s)))
    }
    # ---------------------------------------
    
    
    full<-mutate(geocodes, name=fnames) %>%
      mutate(category=ifelse(grepl("Winery", name), 1, 2)) %>%
      mutate(addressUse=gsub("Ny", "NY", capwords(gsub(", usa", "", address)))) %>%
      mutate(street=sapply(strsplit(addressUse, ","), "[[", 1)) %>%
      mutate(city=sapply(strsplit(addressUse, ","), "[[", 2)) %>%
      filter(!grepl('Interlaken|Ithaca|Aurora|Seneca Falls', street)) %>%
      select(name, street, city, category, lat, lon)
    
    head(full)
    

    This article by Jim Plantethis one also by John Harrison 也值得一看。

    【讨论】:

    • 这没有帮助。我希望能够向网页发送一个热键(apple+a),以便它突出显示所有文本。
    • @ghostrecon27 重新阅读了 Jim Plante 的文章(你显然还没有阅读过 John Harrison 的文章,其中概述了向元素发送事件的概述)
    • LOL 你们两个都不能回答我的问题。就像锤子敲螺丝一样,你缺乏解决问题的能力。
    • @ghostrecon27 我有 16.2k 的代表;我已经解决了很多问题!另一方面,您似乎缺乏编码所需的许多技能(包括对问题的基本理解!)
    • 我的街头代表比你多得多,我们都知道这更重要。
    【解决方案2】:

    正如 Rachel 所说,您可以使用她提供的许多链接中概述的按键。您可以将按键发送到元素(html 标记)。 body html标签可用于发送到页面:

    library(RSelenium)
    rD <- rsDriver()
    appURL <- "https://stackoverflow.com/questions/45123833/is-there-a-way-to-do-commanda-to-highlight-all-text-on-a-page-with-rselenium-o/45123917#45123917"
    remDr <- rD$client
    remDr$navigate(appURL)
    # select the page 
    bElem <- remDr$findElement("css", "body")
    # send key press to page
    bElem$sendKeysToElement(list(key = "control", "a"))
    remDr$screenshot(display = TRUE)
    
    # cleanup
    rm(rD)
    gc()
    

    命令键的 unicode 值为 '\ue03d'。对照 RSelenium 中的特殊键检查这一点:

    sapply(selKeys, function(x) identical(x, '\ue03d'))
    

    显示命令键被引用为command_meta,因此在 MAC(未经测试)中您可以使用:

    bElem$sendKeysToElement(list(key = "command_meta", "a"))
    

    在上面。

    【讨论】:

    • 你是来自 blogspot 的 John Harrison 吗?太棒了... :)
    • 再次不是我想要的。想象一下,有人打开浏览器并访问一个网站,然后简单地按 command+a。我不想抓取 css 元素——这根本不适合我想要实现的目标。
    • 这就是你如何“简单地”访问一个网站并使用 selenium 按 command + a 的方式。您不是在“抓取”css 元素。
    猜你喜欢
    • 2021-12-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-14
    • 1970-01-01
    • 2021-04-03
    • 2011-11-10
    相关资源
    最近更新 更多