我在GNU/Linux上有一个测试机器人,它输入一些电子邮件到一些表单并提交它们。它没有与Rails集成。
我的机器人看起来像这样:
#!/usr/bin/ruby -w
%w(capybara/dsl selenium-webdriver).each(&method(:require))
Capybara.default_driver = :selenium
Selenium::WebDriver::Firefox::Binary.path = '/opt/firefox-developer-edition/firefox'
Capybara.register_driver(:default_profile) do |a|
Capybara::Selenium::Driver.new(a, browser: :firefox, profile: 'default')
end
Capybara.default_driver = :default_profile
Capybara.current_session.driver.browser.manage.window.resize_to(640, 720)
emails = %w(
something1@someone.me
something2@someone.me
something3@someone.me
something4@someone.me
something5@someone.me
something6@someone.me
something7@someone.me
)
names = %W(Sourav SouravGoswami #{"Sourav Goswami"})
n = emails.length
time, len, dsl = Time.now, n.to_s.length, Class.new.extend(Capybara::DSL)
emails.each.with_index do |email, i|
name = names.rotate![0]
elap = Time.now - time
rem = n.*(elap).fdiv(i + 1).-(elap)
print "\e[2K#{sprintf("%0#{len}d", i)} / #{n} | Elapsed: #{elap.round(1)} s | Remaining: #{rem.round(1)} s\r"
dsl.visit('https://somewebsite.net')
dsl.find('#name').set(name)
dsl.find('#email').set(email)
dsl.find('#submit').click
end但每次我运行它时,使用完全更新的selenium webdriver,我都会收到以下警告:
/usr/local/lib/ruby/gems/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/common/driver.rb:54: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
/usr/local/lib/ruby/gems/2.7.0/gems/selenium-webdriver-3.142.7/lib/selenium/webdriver/firefox/driver.rb:31: warning: The called method `new' is defined here
2020-09-24 16:13:14 WARN Selenium [DEPRECATION] :profile is deprecated. Use Selenium::WebDriver::Firefox::Options#profile= instead.因此,我考虑使用:
c = Selenium::WebDriver::Firefox::Options.new
c.profile = 'default'但这不会在默认配置文件中打开firefox,也不会调整窗口大小。
我找不到一个好的文档来记录Selenium::WebDriver::Firefox::Options#profile。
那么我如何摆脱这个错误(除了使用-W0 ruby标志)?
发布于 2020-09-24 23:30:53
转到此文件夹
C:\Users\user\AppData\Roaming\Mozilla\Firefox\Profiles然后找到名为.default的默认文件夹,复制该文件并将该名称附加到上面指定的路径
C:\Users\user\AppData\Roaming\Mozilla\Firefox\Profiles\zxbjl3ls.default然后编写以下代码
profile = Selenium::WebDriver::Firefox::Profile.new('C:\Users\user\AppData\Roaming\Mozilla\Firefox\Profiles\zxbjl3ls.default')
driver=Selenium::WebDriver.for :firefox,:profile => profile更新:
profile = Selenium::WebDriver::Firefox::Profile.new(ENV['APPDATA'] + '\Mozilla\Firefox\Profiles\Normal')发布于 2020-10-16 18:31:49
因为您处理Webdriver初始化的方式在当前的Selenium webdriver中已经过时了。我建议看看Capybara repo中的这段代码作为参考:
https://github.com/teamcapybara/capybara/blob/master/lib/capybara/registrations/drivers.rb#L11
基本上,:profile已被弃用,而不是将其解析到您的驱动程序初始化中作为Capybara::Selenium::Driver.new(a, browser: :firefox, profile: 'default'),您需要按照日志建议构建浏览器选项:
Option 1: Using customize profile
CAPYBARA_WINDOW_SIZE = [640, 720].freeze
ff_profile = Selenium::WebDriver::Firefox::Profile.new.tap do |profile|
# Use this if you want to customize your Firefox profile
# For example:
profile['browser.download.folderList'] = 2
....
....
end
ff_options = Selenium::WebDriver::Firefox::Options.new(profile: ff_profile)
ff_options.add_argument('-headless')
ff_options.add_argument("window-size=#{CAPYBARA_WINDOW_SIZE.join(',')}"
Capybara::Selenium::Driver.new(app, browser: :firefox, options: ff_options)Option 2: Using default profile
CAPYBARA_WINDOW_SIZE = [640, 720].freeze
ff_options = Selenium::WebDriver::Firefox::Options.new
ff_options.add_argument('-headless')
ff_options.add_argument("window-size=#{CAPYBARA_WINDOW_SIZE.join(',')}"
options[:options] = ff_options
Capybara::Selenium::Driver.new(app, browser: :firefox, options: ff_options)https://stackoverflow.com/questions/64044863
复制相似问题