2016-08-16 6 views
0

ここに私のコードのスクレーピング部分は、私が位置のタイトルを返し一部が正常に動作しますので、「.jobtitle」クラスが、存在するという事実を知っている今ルビーMechanizeのクリックが動作しない

while counter <= 3 
    url = "http://www.indeed.ca/jobs?q=" << job_title_search << "&l=" << job_location << ",+ON&start=" << (counter * 20).to_s 
    counter += 1 
    doc = Nokogiri::HTML(open(url)) 

    # can't put in if loop to only perform once for some reason 
    page = agent.get(url) 

    current_page = agent.page.uri 
    puts current_page 

    doc.css(".result").each do |item| 
    job_title = item.at_css(".jobtitle").text[/[^\s][a-zA-Z -]*/] 
    job_company = item.at_css(".company").text[/[^\s][a-zA-Z -]*/] 
    full_job = job_title + " - " + job_company 

    agent.current_page.link_with(:class => '.jobtitle').click 
    posting_page = agent.page.uri 
    puts posting_page 

    if cache.include?(full_job) == false 
     cache << full_job 
     puts "#{job_title} - #{job_company}" 
    end 
    end 

    puts "" 
end 

です。私が理解しようとしているのは、Mechanizeが私に「クリック」機能を使用させない理由です。私がウィキペディアのメインページで行った他のテストでは、CSS ID、クラス、&テキストでうまくいきます。

私の質問は、それがクリック機能で失敗する原因ですか?それが生成するエラーは、一般的な "未定義のメソッド"です。 "nil:NilClass"をクリックします。

答えて

0

clickメソッドを呼び出すオブジェクトがnilであることを示すエラーメッセージが表示されます。

agent.current_page.link_with(:class => '.jobtitle').click 

...私たちは link_withへのお電話は nilを返していることを推測することができます:あなたはここに clickを呼び出します。

あなたのページには、class属性が.jobtitleのリンクがないため、これは失敗していると推測します。むしろ、あなたのページにはおそらくclass属性がjobtitleに等しいリンクがあります。そしてそう:

agent.current_page.link_with(:class => 'jobtitle').click 
+0

私はそれも最初は思ったが、私は、以前のスクリプトで「.jobtitle」クラスにアクセスしていますので、それはそれ(私はナッツつもりはないことを確認するために再びそれを試してみました)ではありません。 – Mitchell

+0

'.jobtitle'はCSSセレクタ、 'jobtitle'はクラス(またはその一部)です。 – pguardiario

関連する問題