在 Symfony/Panther 中,当抓取时,waitfor 函数如果超时将抛出异常 - 如果找不到项目,我需要它继续
In Symfony/Panther when scraping, waitfor function will throw exception if it timesout - i need it to continue if item is not found
我有一个诊所数据库,每个诊所都有一个 url。所有诊所页面在 html/css 方面都是相同的,但要抓取的内容不同。
但是,有些诊所在他们的页面上没有内容,这给我带来了麻烦。
我有:
$crawler = $this->client->request('GET', $clinic->url);
$this->client->waitFor('.facility');
如果 .facility
不存在,waitFor()
将 throw exception
因为 timeout
。在这种情况下,我需要能够继续,而不是抛出异常。所以如果超时,应该继续,而不是结束。
我无法计算设施项目并以这种方式检查它,因为这些是用 ajax 加载的,并且在页面加载开始时不存在。
我尝试和研究的内容:
Is it possible for symfony/panther to wait for some elements n times?
你可以像这样捕获异常...
try
{
$this->client->waitFor('.facility');
}
catch (TimeoutException $e)
{
// Log something here that it was skipped by a timeout...
// PHP will continue
}
在您的 class 顶部,您可能需要添加(这就是 code looks like it is using。):
use Facebook\WebDriver\Exception\TimeoutException;
另请注意,该函数还有其他可能有用的参数:
/**
* @param string $locator The path to an element to be waited for. Can be a CSS selector or Xpath expression.
*
* @throws NoSuchElementException
* @throws TimeoutException
*/
public function waitFor(string $locator, int $timeoutInSecond = 30, int $intervalInMillisecond = 250): PantherCrawler
{
....
我有一个诊所数据库,每个诊所都有一个 url。所有诊所页面在 html/css 方面都是相同的,但要抓取的内容不同。
但是,有些诊所在他们的页面上没有内容,这给我带来了麻烦。
我有:
$crawler = $this->client->request('GET', $clinic->url);
$this->client->waitFor('.facility');
如果 .facility
不存在,waitFor()
将 throw exception
因为 timeout
。在这种情况下,我需要能够继续,而不是抛出异常。所以如果超时,应该继续,而不是结束。
我无法计算设施项目并以这种方式检查它,因为这些是用 ajax 加载的,并且在页面加载开始时不存在。
我尝试和研究的内容:
Is it possible for symfony/panther to wait for some elements n times?
你可以像这样捕获异常...
try
{
$this->client->waitFor('.facility');
}
catch (TimeoutException $e)
{
// Log something here that it was skipped by a timeout...
// PHP will continue
}
在您的 class 顶部,您可能需要添加(这就是 code looks like it is using。):
use Facebook\WebDriver\Exception\TimeoutException;
另请注意,该函数还有其他可能有用的参数:
/**
* @param string $locator The path to an element to be waited for. Can be a CSS selector or Xpath expression.
*
* @throws NoSuchElementException
* @throws TimeoutException
*/
public function waitFor(string $locator, int $timeoutInSecond = 30, int $intervalInMillisecond = 250): PantherCrawler
{
....