我正在尝试制作自动从fiverr.com
网站为我收集数据的软件。
它搜索特定字词,然后按下页面末尾的LOAD MORE
按钮,并一直点击它,直到它加载所有“gig”#。
无论如何,我很清楚如何让它一直点击,直到所有内容都被加载,但我似乎甚至无法点击它。
这是我选择按钮并单击它的代码:
driver.find_element_by_xpath('//*[@class="btn-standard-lrg btn-white"]').click()
我不断收到以下错误:
元素目前不可见,因此可能无法与
进行交互
如果您转到:fiverr gig url并向下滚动,则可以看到LOAD MORE按钮。
答案 0 :(得分:2)
首先,使用“面向布局”或“面向设计”的类btn-standard-lrg
和btn-white
是一种不好的做法。
相反,有一个方便的定位器"by link text",使用它:
load_more = driver.find_element_by_link_text("LOAD MORE")
请注意它的可读性和简单性。
您可能还需要wait until the "Load More" button would become visible:
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
load_more = wait.until(EC.visibility_of_element_located((By.LINK_TEXT, 'LOAD MORE')))
并且,这里是完整的代码,点击“加载更多”,直到它变得不可见,这意味着所有帖子都被加载:
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException
driver = webdriver.Chrome() # or webdriver.Firefox()
driver.get("https://www.fiverr.com/search/gigs?utf8=%E2%9C%93&search_in=everywhere&source=top-bar&query=explainer%20video&page=1&layout=lists&filter=new")
wait = WebDriverWait(driver, 10)
while True:
try:
load_more = wait.until(EC.visibility_of_element_located((By.LINK_TEXT, 'LOAD MORE')))
except TimeoutException:
break
load_more.click()
for item in driver.find_elements_by_css_selector("div.gig-item h3 a.gig-link-main"):
print item.text.strip()
答案 1 :(得分:0)
这似乎是一个问题,因为您正在尝试与页面中不可见的元素进行交互(您需要向下滚动到页面底部以使其可视化)...
尝试做这样的事情:
element = driver.find_element_by_xpath('//*[@class="btn-standard-lrg btn-white"]')
location = element.native.location[:y]
execute_script("window.scrollTo(0, #{location})")
element.click
或在点击滚动到页面底部之前:
execute_script("window.scrollTo(0, 10000)")
答案 2 :(得分:0)
在网站上看到一些jiggery-pokery似乎正在进行中。根据经验,我建议:
一般:
具体: