5

मैं, एक स्क्रीनशॉट लेने scraping, और परीक्षण जैसी बुनियादी चीजें के लिए सेलेनियम का उपयोग करने सीख रहा हूँ और बिना सिर क्रोम, जो अब क्रोम 59मैं हेलेलेस क्रोम पर सेलेनियम वेबड्राइवर का उपयोग कैसे करूं?

के रूप में स्थिर रहा लेने के लिए सक्षम किया गया है है के साथ उपयोग करना चाहते हैं 'सेलेनियम-वेबड्राइवर' मणि और क्रोमेड्रिवर का उपयोग कर एक स्क्रीनशॉट, लेकिन सिरदर्द नहीं।

:> ruby rubytest.rb 
"initializing driver" 
2017-06-07 15:55:43 DEBUG Selenium Executing Process 

["/Users/name/Documents/scrapings/python/env/bin/chromedriver", "--port=9515"] 
2017-06-07 15:55:43 DEBUG Selenium polling for socket on ["127.0.0.1", 9515] 
Starting ChromeDriver 2.29.461585 (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b) on port 9515 
Only local connections are allowed. 
2017-06-07 15:55:43 INFO Selenium -> POST session 
2017-06-07 15:55:43 INFO Selenium >>> http://127.0.0.1:9515/session | {"desiredCapabilities":{"browserName":"chrome","version":"","platform":"ANY","javascriptEnabled":true,"cssSelectorsEnabled":true,"takesScreenshot":false,"nativeEvents":false,"rotatable":false,"chromeOptions":{"args":["--headless","--disable-gpu","--screenshot","--hide-scrollbars"]}}} 
2017-06-07 15:55:43 DEBUG Selenium  > {"Accept"=>"application/json", "Content-Type"=>"application/json; charset=utf-8", "Content-Length"=>"284"} 
[RUBY BACKTRACE TO DRIVER INITIALIZATION] 

मैं जावास्क्रिप्ट और अजगर का उपयोग कर की कोशिश की है:

यहाँ है कि मैं चला रहा हूँ माणिक स्क्रिप्ट जो लॉग से चालक

require 'rubygems' 
require 'selenium-webdriver' 

Selenium::WebDriver.logger.level = :debug 
p 'initializing driver' 
driver = Selenium::WebDriver.for :chrome, switches: %w[--headless --disable-gpu --screenshot --hide-scrollbars] 
p 'navigating to Google' 
driver.navigate.to "http://google.com" 
driver.save_screenshot("./screen.png") 
driver.quit 

और उत्पादन प्रारंभ करने में शुरू करने के बाद लटका हुआ है समान कोड वाले ड्राइवर और कुछ भी काम नहीं करता है। जब मैं पाइथन के साथ कोशिश करता हूं, तो त्रुटि संदेश

WebDriverException: Message: unknown error: Chrome failed to start: exited abnormally 
    (Driver info: chromedriver=2.29.461585 (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b),platform=Mac OS X 10.12.5 x86_64) 
+1

में सेलेनियम के साथ बिना सिर क्रोम की स्थापना के लिए उपयोग की इस है? https://medium.com/@CukeHub/headless-chrome-with-ruby-cucumber-selenium-abf6da437fd9 –

+0

हां, यह कुछ उपयोग था, धन्यवाद। वांछित_ क्षमताओं के माध्यम से '--हेडलेस' तर्क को पास करने से मुझे नेविगेट करने और तत्वों का चयन करने की अनुमति दी गई; हालांकि, यह विधि अभी भी सामान्य 'गैर-हेडलेस' क्रोम जैसे स्क्रीनशॉट नहीं देती है। –

+0

मुझे अभी एक अच्छा छोटा [लिंक] मिला है (https://sermoa.wordpress.com/2013/10/24/getting-chromedriver-to-work-with-ruby-selenium-webdriver-under-osx-mavericks/) जो एक ही/समान समस्या से संबंधित है। –

उत्तर

2

विभिन्न दस्तावेज़ों, ब्लॉग पोस्ट और गिस्ट के माध्यम से अंत में काम करने के लिए प्रबंधित किया गया।

caps = Selenium::WebDriver::Remote::Capabilities.chrome("desiredCapabilities" => {"takesScreenshot" => true}, "chromeOptions" => {"binary" => "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary"}) 

driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps, switches: %w[--headless --no-sandbox --disable-gpu --remote-debugin-port=9222 --screen-size=1200x800] 

आप (मैं कैनरी उपयोग कर रहा हूँ) क्रोम का एक बहुत ही हाल के संस्करण का उपयोग करें और सेलेनियम द्विआधारी के लिए पथ बताने के लिए की जरूरत है। आपको 'लेस्कस्क्रीनशॉट' के लिए वांछित क्षमताओं को भी सही करने की आवश्यकता है।

+0

किसी डॉकर कंटेनर के अंदर चलने वाले किसी भी व्यक्ति के लिए नोट, आपको तत्व को प्रतिस्थापित करने की आवश्यकता होगी।send_keys() इस उपयोग फ़ंक्शन के साथ: def send_keys (d, el, str) \t d.execute_script ('तर्क [0] .setAttribute ("value", तर्क [1])', el, str) अंत इसे इस तरह प्रयोग करें: send_keys (ड्राइवर, खोज एलीमेंट, "वेबड्राइवर") –

+0

मैं क्रोम 59 पर हूं जो सबसे हालिया संस्करण है, और मुझे अभी भी एक खाली स्क्रीनशॉट मिल रहा है। साथ ही, क्या कोई कारण है कि आपने वांछित क्षमताओं को दो बार घोंसला दिया है? –

+1

अच्छा सवाल, और वास्तव में आप सही हैं, हम इसे इस तरह साफ़ कर सकते हैं: कैप्स = सेलेनियम :: वेबड्राइवर :: रिमोट :: क्षमताओं। क्रोम ("वांछित क्षमताएं" => {"takesScreenshot" => true}, "chromeOptions" => {"बाइनरी" => "/ अनुप्रयोग/Google क्रोम Canary.app/Contents/MacOS/Google क्रोम कैनरी", "args" => ["--headless", "--no-sandbox", "--disable-gpu", "--remote-debugin-port = 9222", "--स्क्रीन-आकार = 1200x800"]}) चालक = सेलेनियम :: WebDriver.for: क्रोम, वांछित_ क्षमताओं: कैप्स –

0

मैंने इसे कैसे किया है इसके बारे में blog post लिखा है। संक्षेप:

1) सुनिश्चित करें कि आप क्रोम संस्करण लिनक्स पर 57+, MacOS पर 59+ या 60 + Windows पर (पिछले एक अभी तक जारी नहीं किया गया है है है, आपके पास बीटा, उर्फ ​​"कैनरी" का उपयोग करने के लिए);

2) मणि selenium-webdriver जोड़ें/अपडेट करें;

3) सुनिश्चित करें कि आप क्रोमड्राइवर संस्करण 2.30 या उच्चतर का उपयोग कर रहे हैं;

4) जोड़े ड्राइवर अपने spec_helper.rb या rails_helper.rb के लिए निम्न:

Capybara.register_driver :chrome do |app| 
    Capybara::Selenium::Driver.new app, browser: :chrome, 
    options: Selenium::WebDriver::Chrome::Options.new(args: %w[headless disable-gpu]) 
end 

Capybara.javascript_driver = :chrome 
2

मैं this blog post उपयोगी पाया माणिक

require "selenium-webdriver" 

# configure the driver to run in headless mode 
options = Selenium::WebDriver::Chrome::Options.new 
options.add_argument('--headless') 
driver = Selenium::WebDriver.for :chrome, options: options 

driver.navigate.to "https://www.google.com" 

# resize the window and take a screenshot 
driver.manage.window.resize_to(800, 800) 
driver.save_screenshot "screenshot.png" 
संबंधित मुद्दे