2017-04-12 5 views
0

私はすべて表示されたURLを訪問しようとしていますが、それはあなたが理由もなく二つのループを使用しているhttps://www.google.co.uk/search?q=Rashmi&oq=Rashmi&aqs=chrome..69i57j69i60l3.6857j0j1&sourceid=chrome&ie=UTF-8#q=Rashmi+Custom+TailorsすべてのURLのセレンのPythonを訪問する方法

browser.get('https://www.google.co.uk/search?q=Rashmi&oq=Rashmi&aqs=chrome..69i57j69i60l3.6857j0j1&sourceid=chrome&ie=UTF-8#q=Rashmi+Custom+Tailors') 
    time.sleep(5) 

    try:   
     p_links = browser.find_elements_by_css_selector(' div > h3 > a') 
     url_list = [] 
     for urls in p_links: 
      if "Rashmi Custom Tailors" in urls.text: 

       url = urls.get_attribute("href") 
       url_list.append(url) 
       for url in url_list: 
        browser.get(url) 
        time.sleep(4) 

    except: 
     pass 

答えて

0

あなたの問題は、あなたの悪い習慣の結果であるを使用して:

try: 
    do something 
except: 
    pass 

この行のブロックでは、プログラムが期待どおりに実行された理由についての情報は取得できません。 それがスローする例外は、コードを改善するのに役立ちますが、このようにしないでください。

今、あなたの質問に戻ってください。あなたのコードでは、@Mohammad Rakib Amin's answerのようないくつかの論理エラーがあります。だから、あなたのコードに少し変更を加えるには、この得た:

from selenium import webdriver 
browser = selenium.Chrome() 
browser.get('https://www.google.co.uk/search?q=Rashmi&oq=Rashmi&aqs=chrome..69i57j69i60l3.6857j0j1&sourceid=chrome&ie=UTF-8#q=Rashmi+Custom+Tailors') 
time.sleep(5) 
p_links = browser.find_elements_by_css_selector(' div > h3 > a') 
for urls in p_links: 
    if "Rashmi Custom Tailors" in urls.text: 
     url = urls.get_attribute("href") 
     browser.get(url) 
     time.sleep(4) 

をしかし、これはあなたの問題を解決していないあなたが説明したように、お使いのブラウザは、この最初のURL を訪問すると例外を上げる:

StaleElementReferenceException: Message: stale element reference: element is not attached to the page document 

この例外は、2番目のループで使用している要素がブラウザの現在のページに接続されていないためにスローされます。

これに対する解決策は、あなたのやり方と全く同じことです。すべての要素を見つけ、すべてのURLをリストに追加します。そして、あなたはこのようなリストを繰り返し、それは私のコンピュータ上でうまくいく。お試しください:

from selenium import webdriver 

browser = webdriver.Chrome() 
query_url = "https://www.google.co.uk/search?q=Rashmi&oq=Rashmi&aqs=chrome..69i57j69i60l3.6857j0j1&sourceid=chrome&ie=UTF-8#q=Rashmi+Custom+Tailors" 
browser.get(query_url) 
p_links = browser.find_elements_by_css_selector("div > h3 > a") 
urls = [] 
for elem in p_links: 
    text = elem.text 
    url = elem.get_property('href') 
    if "Rashmi Custom Tailors" in elem.text: 
     urls.append(url) 

for url in urls: 
    browser.get(url) 

おそらく、indent errorを2番目のループで作成しました。

P.S:必要なすべてのコードが含まれている必要があります。他の人があなたに手助けしやすくなります。

+0

私は既に行っています..ループを間違った場所に置いていました。 –

0

まず

Google検索のURLをしませ訪れます。これを試してみてください:

 p_links = browser.find_elements_by_css_selector(' div > h3 > a') 
     for urls in p_links: // All the urls in first page 
      if "Rashmi Custom Tailors" in urls.text: 
       url = urls.get_attribute("href") // the first match 
       browser.get(url) // goto first match 
       time.sleep(4) 

が続いて比較するカウンタを使用して、2ページ目に移動し、のようなもの:

if counter == len(p_link): 
    // click this_page + 1 etc. 
関連する問題