在 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?

HowTo Wait - PHPWebDriver

你可以像这样捕获异常...

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
{
    ....