[RUBY] Erstellen Sie einen Mechanismus zum Buchen von Reservierungen an Qiita [Reservierungsbuchung] ~ Codieren von 10 Zeilen pro Tag ~ ~

Tag 9

Ich möchte mich vom letzten Mal an weiterentwickeln und einen Mechanismus erstellen, um automatisch auf Qiita zu posten.

[Technisches Thema]

Automatische Buchung in Qiita

Sprache

Ziel zu liefern

Veröffentlichen Sie automatisch Ihren eigenen Entwurf von Qiita zum geplanten Datum

Code und Dokumentation

Frustration

Ich habe bis zum letzten Mal mein Bestes mit Mechanisierung gegeben, aber ich konnte keinen Beitrag schreiben, also habe ich aufgegeben und beschlossen, das verbotene Selen zu verwenden ... Bitte beachten Sie, dass nur .....

Machen Sie bis zum letzten Mal mit Selen in explosiver Geschwindigkeit

Wenn Sie jedoch Selen verwenden, können Sie wirklich Gehirnmuskeln spielen, ohne Ihren Kopf zu benutzen ... Weil JS verwendet werden kann ...

Gemfile

gem 'selenium-webdriver'

Fügen Sie das oben genannte zu Ihrer Gemfile hinzu

crawler.rb


require 'nokogiri'
require 'mechanize'
require 'selenium-webdriver'

def selemium_init
  ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
  # caps = Selenium::WebDriver::Remote::Capabilities.chrome('chromeOptions' => { args: ["--user-agent=#{ua}", 'window-size=1280x800', '--incognito'] }) #Geheimmodus
  caps = Selenium::WebDriver::Remote::Capabilities.chrome('chromeOptions' => {args: ["--headless","--no-sandbox", "--disable-setuid-sandbox", "--disable-gpu", "--user-agent=#{ua}", 'window-size=1280x800']})
  
  client = Selenium::WebDriver::Remote::Http::Default.new
  driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps  
end

driver = selemium_init
driver.navigate.to 'https://qiita.com/login'
driver.execute_script("document.getElementsByName('identity')[0].value = 'Mail Adresse'")
driver.execute_script("document.getElementsByName('password')[0].value = 'Passwort'")
driver.execute_script("document.getElementsByName('commit')[0].click()")
sleep 1
driver.navigate.to 'https://qiita.com/drafts'

Sie müssen sich nur anmelden und zur Entwurfsseite springen ... Schon ist das die Arbeit lol

Implementiert vom Datumsvergleich bis zur reservierten Buchung

Wenn Sie eine Funktion hinzufügen, um dort tatsächlich einen Artikel zu veröffentlichen und die Daten zu vergleichen ...

crawler.rb


require 'nokogiri'
require 'mechanize'
require 'selenium-webdriver'

def selemium_init
  ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36'
  # caps = Selenium::WebDriver::Remote::Capabilities.chrome('chromeOptions' => { args: ["--user-agent=#{ua}", 'window-size=1280x800', '--incognito'] }) #Geheimmodus
  caps = Selenium::WebDriver::Remote::Capabilities.chrome('chromeOptions' => {args: ["--headless","--no-sandbox", "--disable-setuid-sandbox", "--disable-gpu", "--user-agent=#{ua}", 'window-size=1280x800']})
  
  client = Selenium::WebDriver::Remote::Http::Default.new
  driver = Selenium::WebDriver.for :chrome, desired_capabilities: caps  
end

driver = selemium_init
driver.navigate.to 'https://qiita.com/login'
driver.execute_script("document.getElementsByName('identity')[0].value = 'Mail Adresse'")
driver.execute_script("document.getElementsByName('password')[0].value = 'Passwort'")
driver.execute_script("document.getElementsByName('commit')[0].click()")
sleep 1
driver.navigate.to 'https://qiita.com/drafts'

doc = Nokogiri::HTML.parse(driver.page_source, nil, 'utf-8')
json = JSON.parse(doc.css('.js-react-on-rails-component')[1].inner_html)
json['creating_draft_items'].each do |item|
  if item['raw_body'].match(/Reservierungsbuchung/)
    date = item['raw_body'].split('Reservierungsbuchung:')[1]
    #Wenn es ein Reservierungsbuchungsdatum gibt
    if Date.today == Date.parse(date)
      driver.navigate.to "https://qiita.com/drafts/#{item['item_uuid']}/edit?resume=true"
      element = driver.find_element(:class, 'editorSubmit_dropdownToggle')
      element.click
      element = driver.find_elements(:class,'editorSubmit_dropdownItem')[2]
      element.click
      submit_element = driver.find_element(:class,'editorSubmit_submitBtnLabel')
      submit_element.click
      label_element = driver.find_element(:class,'creatingModal_label')
      label_element.click
      button_element = driver.find_elements(:class,'btn-primary')[-1]
      button_element.click
      end
  end
end

Dies ist abgeschlossen. Wenn Sie diesen Stapel jeden Tag gegen 20:00 Uhr ausführen, wird er automatisch um 20:00 Uhr veröffentlicht.

Versuchen Sie, cron auf dem Server einzurichten und auszuführen! !! !! !! (Ich werde den reservierten Beitrag in diesem Artikel versuchen lol)

→ Nein .. Ich habe einen wirklich dummen Fehler bemerkt ... Dieser Artikel wurde in der Perspektive moosiert, weil ich auch mit den Briefen an der Reservierungspost auf die Quelle gekommen bin ....

Reservierungspost: 2020-06-12

Recommended Posts

Erstellen Sie einen Mechanismus zum Buchen von Reservierungen an Qiita [Reservierungsbuchung] ~ Codieren von 10 Zeilen pro Tag ~ ~
Erstellen Sie einen Mechanismus zum Buchen von Reservierungen an Qiita [Entwurf einer Akquisition] ~ Codierung von 10 Zeilen pro Tag ~ ~
Codierung von 10 Zeilen pro Tag ~ Scraping-Implementierung ~
Codierung von 10 Zeilen pro Tag ~ Aufbau der Kratzumgebung ~
Post an Qiita Patching-Version
Post an Qiita Patching-Version
So erstellen Sie eine Methode
Ich habe ein Juwel gemacht, um den Text des Org-Modus in Qiita zu posten
Ich möchte die Anzahl der Foto-AC-Downloads grafisch darstellen [MySQL-Ring-Kooperation] ~ Codierung von 10 Zeilen pro Tag ~