- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的 MacBook 上使用 RSelenium 来抓取公开可用的 .csv 文件。到目前为止提出的其他问题都没有对我特别有帮助的答案。请不要将其标记为重复项。
对于 Firefox,我无法禁用该对话框。我尝试了很多不同的东西。
根据 Firefox,我尝试下载的文件的 MIME 类型 text/csv;字符集=UTF-8
。但是,执行以下代码仍然会引发对话框出现:
fprof <- makeFirefoxProfile(list(browser.download.dir = "~/Scrape"
,browser.download.folderList = 2L
,browser.download.manager.showWhenStarting = FALSE
,browser.download.manager.showAlertOnComplete = FALSE
,browser.helperApps.neverAsk.openFile = "text/csv; charset=UTF-8"
,browser.helperApps.neverAsk.saveToDisk = "text/csv; charset=UTF-8"))
browser <- remoteDriver(port = 5556, browserName = "firefox", extraCapabilities = fprof)
我尝试了多种不同的编辑,包括将 MIME 编辑为 text/csv
以及 application/octet-stream
。既不工作。我已经创建了一个 Firefox 配置文件,其中包含一些功能以避免出现对话框。那也不走运。
我尝试转移到 Chrome,但是,唉......在那里,我遇到了另一个问题。 100 个项目后,Chrome 将不允许我自动下载文件。我的抓取功能相当复杂,发布到类似类型问题的唯一解决方案不是很清楚。
我为 Chrome 定义了以下功能,但它不会禁用 100 次下载限制。
eCaps <- list(
chromeOptions =
list(prefs = list(
"profile.default_content_settings.popups" = 0L,
"download.prompt_for_download" = FALSE,
"download.default_directory" = "~/Desktop/WebScrape"
)
)
)
browser <- remoteDriver(port = 5556, browserName = "chrome",extraCapabilities = eCaps)
我很乐意接受任何建议。我花了几个小时试图解决这个问题。感谢您的帮助。
编辑:为了提供更多详细信息,我是一名对刑事司法改革感兴趣的研究员和博士生。我正在从 http://casesearch.courts.state.md.us/casesearch/ 中提取数据检查马里兰州不同类型和司法管辖区的案件。提交给巡回法院的数据请求已被接受;但是,保管人可能无法在合理的时间内(最多几个月)将其提供给我。因此,我正在自己抓取数据。
到目前为止,我编写的代码会自动进入条款和条件页面,输入字母表中的一个字母 - 比如说 A,仅选择巡回法院,选择一组日期,选择一个司法管辖区,然后搜索所有案件.在页面底部,有一个选项可以下载 .csv 格式的记录。我有代码点击这个。我的所有代码都以错误消息的存在为条件。如果弹出这些错误消息,我会返回并更新日期,直到消息消失。
Chrome 将我限制为 100 次下载。由于我今天早些时候发布了代码,所以我将记录合成到一个更大的 .csv 文件中,然后在到达我为字母表中的特定字母选择的搜索日期结束时删除所有类似命名的文件。这将适用于大多数县。我将在安妮阿伦德尔县、巴尔的摩市、巴尔的摩县、霍华德县和蒙哥马利县的巡回法院遇到问题;在这些司法管辖区,鉴于这些县的治安和犯罪水平,我基本上必须每天下载记录。这意味着数以千计的 .csv 文件。 Chrome 的限制确实让它变得很麻烦。
如果有人能帮我从我的 R 代码中清除这个对话框问题,那么我将非常感激。我相信其他人也有或将会有同样的问题。
最佳答案
我记得为一个真的类似的州法律门户网站回答过一两个问题,但它们可能略有不同。我也 100% 不同意这不是一个重复的问题。您选择解决问题的方式可能有点新颖(不是,但您明白我的意思)但是只是因为您选择了一种糟糕的方式来解决它并不意味着实际的事情不是其他 100 种方法的复制品关于迭代抓取和维护状态的问题。
所以,首先:Selenium 是 100% 不必要的。
其次:该站点的 session 超时小得离谱,这可能是导致出现错误的一个因素。该对话框可能仍会“出现”在我下面显示的内容中,但如果您这样做,我会提出一种可能的解决方法。
我们只需要启动 httr
动词使其像浏览器一样运行,并使用底层 libcurl
库/curl
包的功能来保持 session 得到你想要的。
以下是适度注释,但您已经了解了 Selenium,所以您实际上各种了不起,除非您想要更多,否则我将保留它稀疏每个步骤中的信息。基本习语是:
根据需要多次执行迭代中的最后一件事。
library(httr)
# Start scraping ----------------------------------------------------------
httr::GET( # setup cookies & session
url = "http://casesearch.courts.state.md.us/casesearch/",
httr::user_agent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:64.0) Gecko/20100101 Firefox/64.0"),
httr::accept("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"),
verbose() # remove when done monitoring
) -> res
# Say "yes" ---------------------------------------------------------------
httr::POST( # say "yes" to the i agree
url = "http://casesearch.courts.state.md.us/casesearch/processDisclaimer.jis",
httr::user_agent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:64.0) Gecko/20100101 Firefox/64.0"),
httr::accept("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"),
httr::add_headers(
`Referer` = 'http://casesearch.courts.state.md.us/casesearch/'
),
body = list(
disclaimer = "Y",
action = "Continue"
),
encode = "form",
verbose() # remove when done monitoring
) -> res
# Search! -----------------------------------------------------------------
httr::POST( # search!
url = "http://casesearch.courts.state.md.us/casesearch/inquirySearch.jis",
httr::user_agent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:64.0) Gecko/20100101 Firefox/64.0"),
httr::accept("text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"),
httr::add_headers(
`Referer` = 'http://casesearch.courts.state.md.us/casesearch/inquirySearch.jis'
),
body = list(
lastName = "SMITH",
firstName = "",
middleName = "",
partyType = "",
site = "00",
courtSystem = "B",
countyName = "",
filingStart = "",
filingEnd = "",
filingDate = "",
company = "N",
action = "Search"
),
encode = "form",
verbose() # remove when done monitoring
) -> res
# Get CSV URL and download it ---------------------------------------------
pg <- httr::content(res)
html_nodes(pg, xpath=".//span[contains(@class, 'export csv')]/..") %>%
html_attr("href") -> csv_url
httr::GET(
url = sprintf("http://casesearch.courts.state.md.us/%s", csv_url),
httr::user_agent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:64.0) Gecko/20100101 Firefox/64.0"),
httr::write_disk("some-file-name-you-increment-01.csv")
)
# Get the Next URL and go to it -------------------------------------------
html_nodes(pg, xpath=".//a[contains(., 'Next')]")[1] %>%
html_attr("href") -> next_url
httr::GET(
url = sprintf("http://casesearch.courts.state.md.us/%s", next_url),
httr::user_agent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:64.0) Gecko/20100101 Firefox/64.0")
) -> res
# Get CSV … lather / rinse / repeat ---------------------------------------
pg <- httr::content(res)
html_nodes(pg, xpath=".//span[contains(@class, 'export csv')]/..") %>%
html_attr("href") -> csv_url
httr::GET(
url = sprintf("http://casesearch.courts.state.md.us/%s", csv_url),
httr::user_agent("Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:64.0) Gecko/20100101 Firefox/64.0"),
httr::write_disk("some-file-name-you-increment-02.csv")
)
# Prbly put ^^ in an iterator ---------------------------------------------
因此,正如我所说,该站点在 session 方面非常激进。您可以测试非搜索结果页面或测试重新确认页面,然后执行相同的基本 POST
以重新提交并刷新 session 。此外,在我的工作中,有一个查询参数:d-16544-p=2
和 2
之后的 =
是页面number 这样您就可以使用它(或者它为您提供的任何增量变量)并从捕获的最后一页开始(因此您需要跟踪它)。
关于r - 禁用对话框 - 另存为 - Rselenium,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53296807/
我有一个删除按钮,单击该按钮时我希望弹出一个对话框,然后单击“确定”它应该执行 Ajax 调用,否则不应该执行任何操作。这是代码 $('.comment-delete').click(function
public void exitGame() { //pop up dialogue Platform.exit(); } 我已经尝试了很多我在互联网上看到的不同的东西,但我什么都做不了。我所
我有一个典型的素面对话框,效果很好,但是当有人在对话框外单击时,我找不到任何关闭它的选项。我看到了一些jquery示例,我想我可以将其改编为primefaces对话框,但首先要确保还没有解决方案? 谢
我试图让 jquery 对话框在单击按钮时启动,但似乎不起作用。任何帮助将不胜感激: $('#wrapper').dialog({ autoOpen: false,
我试图单独更改标题栏颜色。所以我使用了 .ui-dialog-titlebar ,但它不起作用,所以我尝试使用 ui-widght-header ,它也反射(reflect)到数据表..请告知。 //
我的页面上有 div(box),我正在使用此脚本将 div 显示为对话框。在该 div 内,我有一个超链接,单击该超链接时,我想淡出对话框并关闭。对话框的内容淡出,但对话框的边框保持不变。如果我将 $
我当前有一个对话框,其内容有两个输入(这两个输入使用 .datepicker())。当我打开对话框时,第一个输入成为焦点,并且第一个日期选择器自动出现。我尝试隐藏 div 并模糊输入,但这会导致日期选
我想即时创建一个 jQuery 对话框。我正在使用这个: var newDiv = $(document.createElement('div')); $(newDiv).html('hello th
child: RaisedButton( color: const Color(0xFF5867DD), onPressed: (){ updateProfilePic();
我有下面的 jquery 代码,我已根据我的要求对其进行了自定义,但存在一些问题。首先,用户单击“单击此处”,不会显示对话框。当用户单击“关闭”时,对话框不会消失。非常感谢您提供的所有帮助。
如何创建一个对话框,该对话框的顶部有一个文本,其下方有一个空白区域,用户可以在其中键入内容,在右侧下方有一个 OKAY 按钮,当您单击该按钮时,对话框消失? 像这样: 最佳答案 String inpu
这是一个简单得多的问题。 private static AplotBaseDialog dlg; public Object execute(final ExecutionEvent event) t
我正在为我的应用程序开发小部件。应该有一些小部件可以实现相同的功能,唯一的区别在于它们的布局(主题/外观) 我会创建一个对话框或屏幕,用户可以在其中选择他喜欢的小部件。当我选择它们时,我在很多小部件中
我有 jQuery 对话框窗口,在某些操作中我有一个加载的 blockUI 插件。 我面临的问题是,即使 AJAX 图像仍在显示,我仍然能够在执行 ajax 操作时执行操作。 另一方面,JSP 页面在
我非常熟悉将 jQuery 对话框 div 设置为可见后将其附加到表单元素的技巧。我已经在 .NET 中这样做了一百次左右,而且效果很好!然而,我正在尝试在 Coldfusion 网站上执行此操作,这
我想使用jquery对话框来收集用户信息(例如用户名)。我如何使用 Jquery 做到这一点并将数据收集到 Javascript 变量中? 这是我迄今为止的尝试: // Dialog here, ho
如何设置 jquery 对话框按钮的工具提示?请参阅下面的内容...这里没有 id 或样式类。 jQuery("#dialog-form").dialog ({ autoOpen: false,
我有调用对话框的 JS 函数 function SomeFunction { $('#editformdialog').dialog('open'); } 这显然已经简化了。但是,我得到 a is u
我正在使用 jquery 模式对话框来显示部分 View 中的数据表。在部分 View 中,我有一些脚本,用于将 HTML 表更改为 jquery DataTables。因此,我需要确保表格在对话框中
我正在尝试添加透明的 JQuery 对话框。但我遇到了两个问题: 文本“Hello”的背景不会变得透明 删除标题栏后,我无法再拖动对话框 这些评论是我迄今为止尝试过的。 //Create ne
我是一名优秀的程序员,十分优秀!