你的问题是你的结果不好的做法通过使用:
try:
do something
except:
pass
通过这行代码块,您无法捕获有关程序为何按预期运行的任何信息。它抛出的异常可以帮助您改进代码,不要像这样忽略它。
现在,回到你的问题。在您的代码中,存在一些逻辑错误,例如@穆罕默德·拉基布·阿明的回答 https://stackoverflow.com/a/43400417/6597344。因此,对您的代码进行一些更改,您会得到以下结果:
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)
但这并没有解决你的问题,你的浏览器只会访问第一个网址
就像您所描述的那样并引发异常:
StaleElementReferenceException: Message: stale element reference: element is not attached to the page document
抛出此异常是因为在第二次循环期间,您正在使用的元素不再附加到浏览器的当前页面。
解决方案就像您所做的那样,找到所有元素并将所有 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
在你的第二个循环中。
P.S:您的问题应该包含所需的所有代码,这样其他人可以更轻松地帮助您。