DatePicker 问题 - RSelenium
Issue with DatePicker - RSelenium
我正在为学术研究抓取公开可用的数据。我从中提取信息的网站有一个非常烦人的日期选择器。我不确定他们是否实施此操作以阻止私营公司抓取犯罪数据,但这似乎很愚蠢。
Here's url.
我可以用我的机构凭证绕过验证码,仅供参考。
您可以在下面看到代码 - 减去登录信息:
#Miami Scraper
rm(list=ls())
remDr$close()
rm(rD)
gc()
rm(list=ls())
setwd("~/Desktop/Miami Scrape")
library(httr)
library(rvest)
library(zoo)
library(anytime)
library(lubridate)
library(dplyr)
library(RSelenium)
browser <- remoteDriver(port = 5556, browserName = "firefox")
remDr<-browser[["client"]]
url <- "https://www2.miami-dadeclerk.com/PremierServices/login.aspx"
rD <- rsDriver(verbose=FALSE,port=4444L,browser="firefox")
remDr <- rD$client
remDr$navigate(url)
#Click the Logging In Option
#Log-in stuff happens here
url2 <- "https://www2.miami-dadeclerk.com/cjis/casesearch.aspx"
remDr <- rD$client
remDr$navigate(url2)
#Here, you will read in the sheets. Let's start with a handful
date <- c("02", "01", "01")
sequence <- c("030686","027910","014707")
seqbar <- remDr$findElement("id","txtCaseNo3")
seqbar$sendKeysToElement(list(sequence[1]))
type <- remDr$findElement("id","ddCaseType")
type$clickElement()
type$sendKeysToElement(list("F","\n"))
yearbar <- remDr$findElement("id","txtCaseNo2")
yearbar$clearElement()
prev <- remDr$setTimeout("2000")
yearbar$sendKeysToElement(list(date[1]))
日期选择器总是默认为 19,但这不是系统的。我才刚刚开始开发代码,但我注意到如果我连续两次使用相同的案例信息进行搜索,它会定期从“02”切换到“19”。如果我切换到另一种情况,它可能也不起作用。我不确定如何处理这个日期选择器。任何帮助将不胜感激。
我已经尝试了几件事。如您所见,我已尝试清除默认值并降低我的代码速度。这似乎行不通。
还有最后一点,如果你逐行 运行 代码,它可以工作,但一次执行全部不会 运行 正确。
我无法使用 R 进行测试,因为似乎无法设置 RSelenium,但更改年份输入框的值属性似乎有效。在 R 中,看起来有两种方法可以做到这一点。
无法测试,但类似于:
year <- '02'
#method 1 using inbuilt method which executes js under hood
remDr$findElement('id','txtCaseNo2')$setElementAttribute('value',year)
#method 2 js direct
js <- paste0("document.querySelector('#txtCaseNo2').value='", year,"';")
remDr$executeScript(js)
无论如何,可能足以让您找到解决方案。
我用 Python 成功测试了类似的版本
from selenium import webdriver
d = webdriver.Chrome()
d.get('https://www2.miami-dadeclerk.com/cjis/casesearch.aspx?AspxAutoDetectCookieSupport=1')
case_nums = ["030686"]
year = '02'
d.execute_script("document.querySelector('#txtCaseNo2').value='" + year + "';")
# d.execute_script("arguments[0].value = '02';", d.find_element_by_id('txtCaseNo2'))
d.find_element_by_id('txtCaseNo3').send_keys(case_nums[0])
d.find_element_by_css_selector('[value=F]').click()
captcha = input()
d.find_element_by_id('CaptchaCodeTextBox').send_keys(captcha)
d.find_element_by_id('btnCaseSearch').click()
我正在为学术研究抓取公开可用的数据。我从中提取信息的网站有一个非常烦人的日期选择器。我不确定他们是否实施此操作以阻止私营公司抓取犯罪数据,但这似乎很愚蠢。
Here's url.
我可以用我的机构凭证绕过验证码,仅供参考。
您可以在下面看到代码 - 减去登录信息:
#Miami Scraper
rm(list=ls())
remDr$close()
rm(rD)
gc()
rm(list=ls())
setwd("~/Desktop/Miami Scrape")
library(httr)
library(rvest)
library(zoo)
library(anytime)
library(lubridate)
library(dplyr)
library(RSelenium)
browser <- remoteDriver(port = 5556, browserName = "firefox")
remDr<-browser[["client"]]
url <- "https://www2.miami-dadeclerk.com/PremierServices/login.aspx"
rD <- rsDriver(verbose=FALSE,port=4444L,browser="firefox")
remDr <- rD$client
remDr$navigate(url)
#Click the Logging In Option
#Log-in stuff happens here
url2 <- "https://www2.miami-dadeclerk.com/cjis/casesearch.aspx"
remDr <- rD$client
remDr$navigate(url2)
#Here, you will read in the sheets. Let's start with a handful
date <- c("02", "01", "01")
sequence <- c("030686","027910","014707")
seqbar <- remDr$findElement("id","txtCaseNo3")
seqbar$sendKeysToElement(list(sequence[1]))
type <- remDr$findElement("id","ddCaseType")
type$clickElement()
type$sendKeysToElement(list("F","\n"))
yearbar <- remDr$findElement("id","txtCaseNo2")
yearbar$clearElement()
prev <- remDr$setTimeout("2000")
yearbar$sendKeysToElement(list(date[1]))
日期选择器总是默认为 19,但这不是系统的。我才刚刚开始开发代码,但我注意到如果我连续两次使用相同的案例信息进行搜索,它会定期从“02”切换到“19”。如果我切换到另一种情况,它可能也不起作用。我不确定如何处理这个日期选择器。任何帮助将不胜感激。
我已经尝试了几件事。如您所见,我已尝试清除默认值并降低我的代码速度。这似乎行不通。
还有最后一点,如果你逐行 运行 代码,它可以工作,但一次执行全部不会 运行 正确。
我无法使用 R 进行测试,因为似乎无法设置 RSelenium,但更改年份输入框的值属性似乎有效。在 R 中,看起来有两种方法可以做到这一点。
无法测试,但类似于:
year <- '02'
#method 1 using inbuilt method which executes js under hood
remDr$findElement('id','txtCaseNo2')$setElementAttribute('value',year)
#method 2 js direct
js <- paste0("document.querySelector('#txtCaseNo2').value='", year,"';")
remDr$executeScript(js)
无论如何,可能足以让您找到解决方案。
我用 Python 成功测试了类似的版本
from selenium import webdriver
d = webdriver.Chrome()
d.get('https://www2.miami-dadeclerk.com/cjis/casesearch.aspx?AspxAutoDetectCookieSupport=1')
case_nums = ["030686"]
year = '02'
d.execute_script("document.querySelector('#txtCaseNo2').value='" + year + "';")
# d.execute_script("arguments[0].value = '02';", d.find_element_by_id('txtCaseNo2'))
d.find_element_by_id('txtCaseNo3').send_keys(case_nums[0])
d.find_element_by_css_selector('[value=F]').click()
captcha = input()
d.find_element_by_id('CaptchaCodeTextBox').send_keys(captcha)
d.find_element_by_id('btnCaseSearch').click()