这是方案/兔子洞:我需要关闭chrome pdfreader插件,以便pdfs自动下载而不是在阅读器中加载。我正在使用ruby和watir。看起来很简单,设置位于: 铬://设置/内容/ pdfDocuments 使用Chrome浏览器时。
(我已经在创建浏览器时找到了开关,配置文件设置,但没有找到)
如果您查看页面,我需要点击一个按钮。
这是摩擦,它被埋在几层“阴影根”中,使它看不见。经过几个小时的研究,watir并没有很好地处理这个问题。
我找到了一个可能的解决方案: Shadow-dom support for selenium 看起来像python。
我试图用红宝石模拟这个:
def expand_shadow_element(element, driver)
shadow_root = driver.execute_script('return arguments[0].shadowRoot', element)
return shadow_root
end
root0 = driver.find_element :tag_name => 'settings-ui'
shadow_root0 = expand_shadow_element(root0, driver)
root1 = shadow_root0.find_element :tag_name => 'settings-subpage'
shadow_root1 = expand_shadow_element(root1, driver)
root2 = shadow_root1.find_element :tag_name => 'settings-pdf-documents'
shadow_root2 = expand_shadow_element(root2, driver)
root3 = shadow_root2.find_element :tag_name => 'settings-toggle-button'
shadow_root3 = expand_shadow_element(root3, driver)
root4 = shadow_root3.find_element :tag_name => 'paper-toggle-button'
shadow_root4 = expand_shadow_element(root4, driver)
toggleButton = shadow_root4.find_element :id => "toggleButton"
toggleButton.click
def似乎有效,但是一旦定义了“root1”,就会出错:
Selenium :: WebDriver :: Error :: UnknownError:未知错误:b.getElementsByTagName不是函数
所以基本上有2个问题:
DM
答案 0 :(得分:0)
在您提供文件的响应中,将content-disposition标头设置为attachment
,然后下载。例如:
headers['Content-Disposition'] = "attachment; filename=\"#{filename}\""