所以我目前正在努力点击“#34;下载”按钮"。我尝试过多种不同的方式使用css_selector
,而且我最确定的方式(下面)因某种原因给我一个错误。有人可以看看我下面的代码,并帮助我理解代码有什么问题。
以下是该计划的全部代码:
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
browser = webdriver.Firefox()
browser.get('https://torrentz.eu/')
searchElem = browser.find_element_by_id('thesearchbox')
searchElem.send_keys('Limitless')
searchButton = browser.find_element_by_id('thesearchbutton')
searchButton.click()
wait = WebDriverWait(browser, 6)
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.results dl")))
link_num_1 = browser.find_element_by_css_selector('div.results dl dt a')
link_num_1.click()
wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.download dl")))
link_num_2 = browser.find_elements_by_css_selector('div.download dl dt a')
link_num_2[1].click()
这就是问题所在:
Site_link_trynum_1 = wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.category-detail li a")))
#Site_link_trynum_1 = browser.find_element_by_css_selector("div.li a")
Site_link_trynum_1.click()
答案 0 :(得分:1)
从它的外观中找不到- (void)updateLayout
{
// Update the frame of the header view so that it scrolls with the webview content
CGRect newHeaderFrame = self.headerView.frame;
CGRect newFooterFrame = self.footerView.frame;
newHeaderFrame.origin.y = -CGRectGetMinY([self.webView convertRect:self.innerHeaderView.frame toView:self.webView.scrollView]);
newFooterFrame.origin.y = self.webView.scrollView.contentSize.height;
[self.headerView setFrame:newHeaderFrame];
[self.footerView setFrame:newFooterFrame];
if ([self didTapToFullScreen])
{
// The delegate was already called in this case, in the tap gesture callback method
return;
}
BOOL fullScreen = (newHeaderFrame.origin.y < 0);
if (([self isZooming] && [self didSwitchToFullScreen]) || (fullScreen == [self isFullScreen]))
{
return;
}
[self setSwitchToFullScreen:fullScreen];
[self setFullScreen:fullScreen];
// Call the delegate for the full screen
[self.fullScreenDelegate emailView:self showFullScreen:fullScreen];
}
,因为该页面已在新窗口中打开,而Selenium正在原始窗口(torrents.eu)中查找它。
您可以尝试使用switch_to_window()切换窗口
方法,虽然因为你正在处理很多弹出窗口,但最好是获取传出的url并在当前窗口中打开它,就像这样,
UIWebView
但是,值得考虑的是,如果获取网站链接是您的目标,那么就要避免将Selenium放在一起并编写一种网络爬虫。如果你确实继续使用Selenium,那么看看Splinter可能是值得的,它是Selenium之上的一个抽象层,可以更容易地编写测试。使用Splinter时,上面的测试看起来就像这样,
div.category-detail li a